using FSI.BT.Tools.Global.Helpers;
using FSI.BT.Tools.RadialMenu.Provider;
using FSI.Lib.MVVM;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Windows;
using System.Windows.Input;

namespace FSI.BT.Tools.RadialMenu
{
    public class MainViewModel : ViewModelBase
    {
        public MainViewModel(Window win, List<string> cmds)
        {
            _window = win;
            _window.Deactivated += _window_Deactivated;
            _isOpenHome = true;

            Cmds = new();

            if (cmds != null)               
            {
                foreach (string cmd in cmds)
                    Cmds.Add(cmd);  
            }
            
            Provider = new(ref _cmds);
        }


        private ObservableCollection<string> _cmds;

        public ObservableCollection<string> Cmds
        {
            get { return _cmds; }
            set
            {
                _cmds = value;
                OnPropertyChanged();
            }
        }

        private CmdProvider _cmdProvider;

        public CmdProvider Provider
        {
            get { return _cmdProvider; }
            set { _cmdProvider = value; }
        }


        private string _cmd;

        public string Cmd
        {
            get { return _cmd; }
            set
            {
                _cmd = value;
                OnPropertyChanged();
            }
        }


        private Window _window;

        public Window Window
        {
            get { return _window; }
            set { _window = value; }
        }

        #region Home
        private bool _isOpenHome = true;
        public bool IsOpenHome
        {
            get
            {
                return _isOpenHome;
            }
            set
            {
                _isOpenHome = value;
                OnPropertyChanged();
            }
        }

        public ICommand CloseRadialMenuHome
        {
            get
            {
                return new RelayCommand(() => _window.Visibility = Visibility.Hidden);
            }
        }

        public ICommand OpenRadialMenuHome
        {
            get
            {
                return new RelayCommand(() =>
                {
                    IsOpenHome = true;
                    IsOpenEpl =
                    IsOpenTools =
                    IsOpenSie =
                    IsOpenApps =
                    IsOpenPlantLinksPl1 =
                    IsOpenPlantLinksPl2 =
                    IsOpenPlantLinksPl3 =
                    IsOpenAppsVncRdp =
                    IsOpenLinks = false;
                });
            }
        }
        #endregion

        #region Epl

        private bool _isOpenEpl = false;
        public bool IsOpenEpl
        {
            get
            {
                return _isOpenEpl;
            }
            set
            {
                _isOpenEpl = value;
                OnPropertyChanged();
            }
        }

        public ICommand OpenRadialMenuEpl
        {
            get
            {
                return new RelayCommand(() =>
                {
                    IsOpenEpl = true;
                    IsOpenHome = false;
                });
            }
        }

        #endregion

        #region Tools

        private bool _isOpenTools = false;
        public bool IsOpenTools
        {
            get
            {
                return _isOpenTools;
            }
            set
            {
                _isOpenTools = value;
                OnPropertyChanged();
            }
        }

        public ICommand OpenRadialMenuTools
        {
            get
            {
                return new RelayCommand(() =>
                {
                    IsOpenTools = true;
                    IsOpenHome = false;
                });
            }
        }

        #endregion

        #region Siemens

        private bool _isOpenSie = false;
        public bool IsOpenSie
        {
            get
            {
                return _isOpenSie;
            }
            set
            {
                _isOpenSie = value;
                OnPropertyChanged();
            }
        }

        public ICommand OpenRadialMenuSie
        {
            get
            {
                return new RelayCommand(() =>
                {
                    IsOpenSie = true;
                    IsOpenHome = false;
                });
            }
        }

        #endregion

        #region Links

        private bool _isOpenLinks = false;
        public bool IsOpenLinks
        {
            get
            {
                return _isOpenLinks;
            }
            set
            {
                _isOpenLinks = value;
                OnPropertyChanged();
            }
        }

        public ICommand OpenRadialMenuLinks
        {
            get
            {
                return new RelayCommand(() =>
                {
                    IsOpenLinks = true;
                    IsOpenPlantLinks =
                    IsOpenHome = false;
                });
            }
        }

        #endregion

        #region Anlagen Links

        private bool _isOpenPlantLinks = false;
        public bool IsOpenPlantLinks
        {
            get
            {
                return _isOpenPlantLinks;
            }
            set
            {
                _isOpenPlantLinks = value;
                OnPropertyChanged();
            }
        }

        public ICommand OpenRadialMenuPlantLinks
        {
            get
            {
                return new RelayCommand(() =>
                {
                    IsOpenPlantLinks = true;
                    IsOpenPlantLinksPl1 =
                    IsOpenPlantLinksPl2 =
                    IsOpenPlantLinksPl3 =
                    IsOpenLinks = false;
                });
            }
        }

        #endregion

        #region Anlagen Links Pl1

        private bool _isOpenPlantLinksPl1 = false;
        public bool IsOpenPlantLinksPl1
        {
            get
            {
                return _isOpenPlantLinksPl1;
            }
            set
            {
                _isOpenPlantLinksPl1 = value;
                OnPropertyChanged();
            }
        }

        public ICommand OpenRadialMenuPlantLinksPl1
        {
            get
            {
                return new RelayCommand(() =>
                {
                    IsOpenPlantLinksPl1 = true;
                    IsOpenPlantLinks = false;

                });
            }
        }

        #endregion

        #region Anlagen Links Pl2

        private bool _isOpenPlantLinksPl2 = false;
        public bool IsOpenPlantLinksPl2
        {
            get
            {
                return _isOpenPlantLinksPl2;
            }
            set
            {
                _isOpenPlantLinksPl2 = value;
                OnPropertyChanged();
            }
        }

        public ICommand OpenRadialMenuPlantLinksPl2
        {
            get
            {
                return new RelayCommand(() =>
                {
                    IsOpenPlantLinksPl2 = true;
                    IsOpenPlantLinks = false;

                });
            }
        }

        #endregion

        #region Anlagen Links Pl3

        private bool _isOpenPlantLinksPl3 = false;
        public bool IsOpenPlantLinksPl3
        {
            get
            {
                return _isOpenPlantLinksPl3;
            }
            set
            {
                _isOpenPlantLinksPl3 = value;
                OnPropertyChanged();
            }
        }

        public ICommand OpenRadialMenuPlantLinksPl3
        {
            get
            {
                return new RelayCommand(() =>
                {
                    IsOpenPlantLinksPl3 = true;
                    IsOpenPlantLinks = false;

                });
            }
        }

        #endregion

        #region Apps

        private bool _isOpenApps = false;
        public bool IsOpenApps
        {
            get
            {
                return _isOpenApps;
            }
            set
            {
                _isOpenApps = value;
                OnPropertyChanged();
            }
        }

        public ICommand OpenRadialMenuApps
        {
            get
            {
                return new RelayCommand(() =>
                {
                    IsOpenApps = true;
                    IsOpenAppsVncRdp =
                    IsOpenHome = false;
                });
            }
        }

        #endregion

        #region Apps RDP VNC

        private bool _isOpenAppsVncRdp = false;
        public bool IsOpenAppsVncRdp
        {
            get
            {
                return _isOpenAppsVncRdp;
            }
            set
            {
                _isOpenAppsVncRdp = value;
                OnPropertyChanged();
            }
        }

        public ICommand OpenRadialMenuAppsVncRdp
        {
            get
            {
                return new RelayCommand(() =>
                {
                    IsOpenAppsVncRdp = true;
                    IsOpenApps = false;
                });
            }
        }

        #endregion

        private void _window_Deactivated(object sender, EventArgs e)
        {
            _window.Visibility = Visibility.Hidden;

            IsOpenHome = true;
            IsOpenEpl =
            IsOpenTools =
            IsOpenSie =
            IsOpenLinks =
            IsOpenApps =
            IsOpenPlantLinksPl1 =
            IsOpenPlantLinksPl2 =
            IsOpenPlantLinksPl3 =
            IsOpenAppsVncRdp =
            IsOpenPlantLinks = false;
        }
    }
}
