using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace F4SDicons.User_Controls
{
    public partial class WindowStateBar : UserControl
    {
        public WindowStateBar()
        {
            InitializeComponent();
        }

        public bool isWindowRight = false;

        #region DockWindow

        //TopLeft Position of Screen
        public static void TopLeftCorner(System.Windows.Window window)
        {
            var screen = System.Windows.Forms.Screen.FromPoint(new System.Drawing.Point((int)window.Left, (int)window.Top));

            window.Top = screen.WorkingArea.Top;
            window.Left = screen.WorkingArea.Left;

        }

        //TopRight Position of Screen
        public static void TopRightCorner(System.Windows.Window window)
        {
            var screen = System.Windows.Forms.Screen.FromPoint(new System.Drawing.Point((int)window.Left, (int)window.Top));

            window.Top = screen.WorkingArea.Top;
            window.Left = screen.WorkingArea.Left + window.ActualWidth + window.ActualWidth;

        }

        public static void TopRightCorner2(System.Windows.Window window)
        {
            var screen = System.Windows.Forms.Screen.FromPoint(new System.Drawing.Point((int)window.Left, (int)window.Top));

            window.Top = screen.WorkingArea.Top;
            window.Left = screen.WorkingArea.Right - window.ActualWidth;

        }

        private void WindowToTopLeftCorner(object sender, MouseButtonEventArgs e)
        {

            resizeWindow();

            TopLeftCorner(Window.GetWindow(this));
            isWindowRight = false;
        }

        private void WindowToTopRightCorner(object sender, MouseButtonEventArgs e)
        {

            resizeWindow();

            TopLeftCorner(Window.GetWindow(this));
            isWindowRight = false;

            TopRightCorner(Window.GetWindow(this));
            isWindowRight = true;
        }

        #endregion

        #region Minimize

        //Minimize Window
        private void minimizeWindow_ButtonUp(object sender, MouseButtonEventArgs e)
        {

            Window.GetWindow(this).WindowState = WindowState.Minimized;
        }

        #endregion

        #region Resize

        //Resize Window
        private void resizeWindow2_ButtonUp(object sender, MouseButtonEventArgs e)
        {
            resizeWindow2();

            if (isWindowRight == false)
            {
                TopLeftCorner(Window.GetWindow(this));
            }
            else
            {
                TopRightCorner2(Window.GetWindow(this));
            }

            resizeIcon.Visibility = Visibility.Visible;

            resizeIcon2.Visibility = Visibility.Collapsed;
        }

        private void resizeWindow()
        {
            Rect rectangle = GetCurrentScreenWorkArea(Window.GetWindow(this));
            double wHeight = rectangle.Height;
            double wWidth = rectangle.Width;
            wWidth = wWidth / 3;
            Window.GetWindow(this).Height = wHeight;
            Window.GetWindow(this).Width = wWidth;

            resizeIcon2.Visibility = Visibility.Visible;

            resizeIcon.Visibility = Visibility.Collapsed;
        }

        private void resizeWindow2()
        {
            Window.GetWindow(this).Height = 600;
            Window.GetWindow(this).Width = 880;
        }

        #endregion

        #region Display

        public static Rect GetCurrentScreenWorkArea(System.Windows.Window window)
        {
            var screen = System.Windows.Forms.Screen.FromPoint(new System.Drawing.Point((int)window.Left, (int)window.Top));
            var dpiScale = VisualTreeHelper.GetDpi(window);

            return new Rect { Width = screen.WorkingArea.Width / dpiScale.DpiScaleX, Height = screen.WorkingArea.Height / dpiScale.DpiScaleY };
        }

        #endregion

        #region Close Window

        private void closeWindow_ButtonUp(object sender, MouseButtonEventArgs e)
        {
            Window.GetWindow(this).Close();
        }

        #endregion

        #region Drag Move

        private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            Window.GetWindow(this).DragMove();
        }

        #endregion

    }
}
