using DeviceCommand.Base;
using MaterialDesignThemes.Wpf;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Media;
using UIShare.UIViewModel;

namespace UIShare.GlobalVariable
{
    public class ScopedContext
    {
        private static readonly Random _randomSeed = new Random();
        public ProgramVM Program { get; set; } = new();
        public String SelectedStepList { get; set; } = "主程序";
        public string CurrentFilePath { get; set; }
        public bool? IsStop { get; set; }
        public bool SingleStep { get; set; }
        public string RunState { get; set; } = "运行";
        public TimeSpan RunningTime { get; set; } = TimeSpan.Zero;
        public Stopwatch SW { get; set; } = new();
        public bool IsTerminate { get; set; } = false;
        public ObservableCollection<Assembly> Assemblies { get; set; } = new();
        public PackIconKind RunIcon { get; set; } = PackIconKind.Play;
        public StepVM SelectedStep { get; set; }
        public ParameterVM SelectedParameter { get; set; }

        public List<IBaseInterface> DeviceList { get; set; } = new();

        /// <summary>
        /// 日志缓冲队列：后台线程（ScopeLogDispatcher）直接入队，
        /// UI 线程（DispatcherTimer）定时出队并刷新到 ObservableCollection。
        /// 不走 Progress&lt;T&gt; / SynchronizationContext，避免 Post 淹没 UI 消息队列。
        /// </summary>
        public ConcurrentQueue<(string Message, Brush Color, int Depth)> LogBuffer { get; } = new();

        // 【新增测试属性】：每个实例被 new 出来时独一无二的随机身份
        // 证 ID
        public int DebugRandomId { get; private set; }
        public ScopedContext()
        {
            lock (_randomSeed)
            {
                // 每次诞生一个新上下文，就在 10000 到 99999 之间随机摇一个数
                DebugRandomId = _randomSeed.Next(10000, 100000);
            }
        }
    }
}
