using System;
using System.ComponentModel;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Windows;
using System.Windows.Forms;
using System.Windows.Input;

namespace FSI.BT.Tools
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class FrmRadialMenu : Window, INotifyPropertyChanged
    {

        public FrmRadialMenu()
        {
            InitializeComponent();
            DataContext = this;
            _isOpenHome = true;
            tbversion.Text = "v" + Assembly.GetExecutingAssembly().GetName().Version.Major + "." + Assembly.GetExecutingAssembly().GetName().Version.Minor;
        }

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

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

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

        #region Epl

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

        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;
                RaisePropertyChanged();
            }
        }

        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;
                RaisePropertyChanged();
            }
        }

        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;
                RaisePropertyChanged();
            }
        }

        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;
                RaisePropertyChanged();
            }
        }

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

        #endregion

        #region Apps

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

        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;
                RaisePropertyChanged();
            }
        }

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

        #endregion

        public event PropertyChangedEventHandler PropertyChanged;

        void RaisePropertyChanged([CallerMemberName] string? propertyName = null)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }

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

            IsOpenHome = true;
            IsOpenEpl =
            IsOpenTools =
            IsOpenSie =
            IsOpenLinks =
            IsOpenApps =
            IsOpenPlantLinks = false;
        }
    }
}
