using MainShell.Hardware;
using MaxwellFramework.Core.Interfaces;
using MwFramework.Controls.Components;
using MwFramework.ManagerService;
using Stylet;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;


namespace MainShell.AlgorithmCalib.ViewModel
{
    public class RotateCenterCalibContentsViewModel:Screen,IPage
    {
        private HardwareManager _hardware;
        public ICommand PrevCommand { get; set; }
        public ICommand NextCommand { get; set; }
        private IParameterManager _parameterManager;
        public string Name { get; set; } = "RotateCenterCalib";


        private ObservableCollection<Screen> _screens;
        /// <summary>
        /// 需要显示的界面
        /// </summary>
        public ObservableCollection<Screen> Screens
        {
            get { return _screens; }
            set
            { SetAndNotify(ref _screens, value); }
        }
        private Screen _showScreenVM;
        /// <summary>
        /// 当前显示界面的VM
        /// </summary>
        public Screen ShowScreenVM
        {
            get { return _showScreenVM; }
            set
            { SetAndNotify(ref _showScreenVM, value); }
        }
        private string _currentCalibName;
        /// <summary>
        /// 当前标定名称，供UI标定
        /// </summary>
        public string CurrentCalibName
        {
            get { return _currentCalibName; }
            set { SetAndNotify(ref _currentCalibName, value); }
        }
        private string _progressText;
        /// <summary>
        /// 进度提示
        /// </summary>
        public string ProgressText
        {
            get { return _progressText; }
            set { SetAndNotify(ref _progressText, value); }
        }
        private int _showIndex;
        /// <summary>
        /// 当前显示界面的下标
        /// </summary>
        public int ShowIndex
        {
            get { return _showIndex; }
            set
            { SetAndNotify(ref _showIndex, value); }
        }
        private bool _isEnablePrev;
        /// <summary>
        /// 上一个按钮是否启用
        /// </summary>
        public bool IsEnablePrev
        {
            get { return _isEnablePrev; }
            set
            { SetAndNotify(ref _isEnablePrev, value); }
        }
        private bool _isEnableNext = true;
        /// <summary>
        /// 下一个按钮是否启用
        /// </summary>
        public bool IsEnableNext
        {
            get { return _isEnableNext; }
            set
            { SetAndNotify(ref _isEnableNext, value); }
        }


        public RotateCenterCalibContentsViewModel(IParameterManager paraManager)
        {
            _hardware = IoC.Get<HardwareManager>();
            this._parameterManager = paraManager;
            PrevCommand = new DelegateCommand(() =>
            {
                OnPrev();
            });

            NextCommand = new DelegateCommand(() =>
            {
                OnNext();
            });
        }

        private bool _isInit = false;
        protected override void OnViewLoaded()
        {
            base.OnViewLoaded();
            if (!_isInit)
            {
                Screens = new ObservableCollection<Screen>();
                // ====== 定义5组相机-轴配置 ======
                var cameraConfigs = new List<(string Name, List<HardwareDevice> Device)>
                {
                    ("上相机旋转中心标定", _hardware.CameraAxisManager.TopCameraAxisDevices),
                    ("广角相机旋转中心标定", _hardware.CameraAxisManager.WideCameraAxisDevices),
                    ("下相机旋转中心标定",  _hardware.CameraAxisManager.BottomCameraAxisDevices),
                };

                foreach (var (name, device) in cameraConfigs)
                {
                    Screens.Add(RotateCenterCalibViewModel.Create(name, device, _hardware.Axis_WS_R));
                }
                // 默认显示第一个
                ShowIndex = 0;
                ShowScreenVM = Screens[0];
                UpdateNavigationState();
                _isInit = true;
            }
        }

        public void viewUnLoad()
        {
            //_device.ChangeCameraMode(CameraTriggerMode.On);
            //_pLCControlOperation.CyliderPress(true);
        }

        private void OnPrev()
        {
            if (ShowIndex <= 0) return;

            ShowIndex--;
            ShowScreenVM = Screens[ShowIndex];
            UpdateNavigationState();
        }

        private void OnNext()
        {
            if (ShowIndex >= Screens.Count - 1) return;

            ShowIndex++;
            ShowScreenVM = Screens[ShowIndex];
            UpdateNavigationState();
        }

        /// <summary>
        /// 统一更新导航状态和当前相机信息
        /// </summary>
        private void UpdateNavigationState()
        {
            IsEnablePrev = ShowIndex > 0;
            IsEnableNext = ShowIndex < Screens.Count - 1;

            // 更新当前相机名称
            if (ShowScreenVM is RotateCenterCalibViewModel camVm)
            {
                CurrentCalibName = camVm.CalibName;
            }

            // 更新进度
            ProgressText = $"{ShowIndex + 1} / {Screens.Count}";
        }
    }
}
