using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using SparkClient.Model.Helper;
using SparkClient.ViewModel.BaseWindow;

namespace SparkClient.Views.BaseWindow;

public partial class BaseControl
{
    private Window parentWindow;
    public BaseControl()
    {
        InitializeComponent();
        
        // 动态设置圆角裁剪
        this.Loaded += (s, e) => ApplyCornerRadiusClip();
        this.SizeChanged += (s, e) => ApplyCornerRadiusClip(); // 保证在大小改变时也裁剪
    }
    
    private void Border_Minimize_MouseEnter(object sender, MouseEventArgs e)
    {
        // 鼠标进入时更改背景色
        if (sender is Border border)
        {
            border.Background = new SolidColorBrush(Color.FromArgb(50, 255, 255, 255));
        }
    }
    private void Border_Close_MouseEnter(object sender, MouseEventArgs e)
    {
        // 鼠标进入时更改背景色
        if (sender is Border border)
        {
            border.Background = new SolidColorBrush(Color.FromArgb(50, 255, 0, 0));
        }
    }
    private void Border_MouseLeave(object sender, MouseEventArgs e)
    {
        // 鼠标离开时恢复背景色
        if (sender is Border border)
        {
            border.Background = new SolidColorBrush(Colors.Transparent);
        }
    }
    
    private void ApplyCornerRadiusClip()
    {
        // 使用矩形几何生成圆角裁剪
        this.Clip = new RectangleGeometry
        {
            Rect = new Rect(0, 0, this.ActualWidth, this.ActualHeight),
            RadiusX = this.CornerRadius.TopLeft, // 使用 Border 的 CornerRadius
            RadiusY = this.CornerRadius.TopLeft
        };
    }
   
    
    private void Minimize_Click(object sender, MouseButtonEventArgs e)
    {
        //this.WindowState = WindowState.Minimized;
        if(parentWindow != null)parentWindow.WindowState = WindowState.Minimized;
    }
    
    private void Close_Click(object sender, MouseButtonEventArgs e)
    {
        parentWindow.Close();
    }
    
    private void UIElement_OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        if (e.LeftButton == MouseButtonState.Pressed)
        {
            try
            {
               // this.DragMove();
            }
            catch (InvalidOperationException ex)
            {
               
            }
        }
    }


    private void BaseControl_OnLoaded(object sender, RoutedEventArgs e)
    {
        parentWindow = Window.GetWindow(this);
    }
}