using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ShiftOS
{
    public partial class AlternateDesktop : Form
    {
        public AlternateDesktop()
        {
            InitializeComponent();
        }

        private void ClockTick_Tick(object sender, EventArgs e)
        {
            lbclock.Text = API.GetTime();
            
        }

        public void GetApps()
        {
            pnlsidebar.Controls.Clear();
            API.GetAppLauncherItems();
            Panel appbtn = new Panel();
            appbtn.BackColor = Color.Black;
            appbtn.Size = new Size(32, 32);
            appbtn.Visible = true;
            appbtn.Name = "ashow";
            appbtn.Click += new EventHandler(this.SidebarButton_Click);

            pnlsidebar.Controls.Add(appbtn);
            foreach(ApplauncherItem itm in API.AppLauncherItems)
            {
                if(itm.Display == true)
                {
                    Panel btn = new Panel();
                    btn.BackColor = Color.Gray;
                    btn.BackgroundImage = itm.Icon;
                    btn.BackgroundImageLayout = ImageLayout.Stretch;
                    btn.Size = new Size(32, 32);
                    btn.Name = $"al_{new Random().Next(1000, 9999)}";
                    btn.Tag = itm;
                    btn.MouseMove += new MouseEventHandler(this.SidebarButton_Hover);
                    btn.MouseLeave += new EventHandler(this.SidebarButton_Leave);
                    btn.Click += new EventHandler(this.SidebarButton_Click);
                    pnlsidebar.Controls.Add(btn);
                    btn.Show();
                }
            }
            foreach(PanelButton pbtn in API.PanelButtons)
            {
                Panel btn = new Panel();
                btn.Tag = pbtn;
                btn.Name = $"pnl_{new Random().Next(1000, 9999)}";
                btn.BackgroundImage = pbtn.Icon;
                btn.BackgroundImageLayout = ImageLayout.Stretch;
                btn.BackColor = Color.Black;
                btn.Size = new Size(32, 32);
                btn.MouseMove += new MouseEventHandler(this.SidebarButton_Hover);
                btn.MouseLeave += new EventHandler(this.SidebarButton_Leave);
                btn.Click += new EventHandler(this.SidebarButton_Click);
                pnlsidebar.Controls.Add(btn);
                btn.Show();
            }
        }

        public void SidebarButton_Hover(object sender, MouseEventArgs e)
        {
            Panel s = (Panel)sender;
            int labelLoc = pnlcontext.Height + (s.Bottom - (s.Height / 2));
            lblapplabel.Location = new Point(pnlsidebar.Width + 5, labelLoc);
            if(s.Name.Contains("al"))
            {
                var itm = (ApplauncherItem)s.Tag;
                lblapplabel.Text = itm.Name;
            }
            else
            {
                var itm = (PanelButton)s.Tag;
                lblapplabel.Text = itm.Name;
            }
            lblapplabel.Visible = true;
        }

        public void SidebarButton_Click(object sender, EventArgs e)
        {
            var s = (Panel)sender;
            if (s.Name.Contains("al"))
            {
                var itm = (ApplauncherItem)s.Tag;
                var li = new LuaInterpreter();
                li.mod(itm.Lua);
                li = null;
            }
            else if(s.Name.Contains("ashow"))
            {
                pnlapplauncher.Show();
                foreach(Control ctrl in this.Controls)
                {
                    ctrl.MouseDown += (object se, MouseEventArgs a) =>
                    {
                        pnlapplauncher.Hide();
                    };
                }
            }
            else
            {
                try
                {
                    PanelButton pbtn = (PanelButton)s.Tag;
                    API.ToggleMinimized(pbtn.FormToManage);
                }
                catch (Exception ex)
                {

                }
            }
        }

        public void SidebarButton_Leave(object sender, EventArgs e)
        {
            lblapplabel.Hide();
        }

        private void AlternateDesktop_Load(object sender, EventArgs e)
        {
            this.ShowInTaskbar = false;
            this.FormBorderStyle = FormBorderStyle.None;
            this.WindowState = FormWindowState.Maximized;
            GetApps();
        }

        private void apptick_Tick(object sender, EventArgs e)
        {
            //GetApps();
        }

        private bool unity = false;

        public void ToggleUnityMode()
        {
            if (unity == false)
            {
                unity = true;
                this.BackColor = Skinning.Utilities.globaltransparencycolour;
                this.BackgroundImage = null;
                this.TransparencyKey = Skinning.Utilities.globaltransparencycolour;
            }
            else
            {
                unity = false;
                this.BackColor = API.CurrentSkin.desktopbackgroundcolour;
                this.BackgroundImage = API.CurrentSkinImages.desktopbackground;
                this.BackgroundImageLayout = (ImageLayout)API.CurrentSkin.desktopbackgroundlayout;
                this.TransparencyKey = Skinning.Utilities.globaltransparencycolour;
            }
        }
    }
}