using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
using Avalonia.Media;
using System.Windows.Input;

namespace SPTInstaller.CustomControls;

public partial class TitleBar : UserControl
{
    public TitleBar()
    {
        InitializeComponent();
    }

    private void InitializeComponent()
    {
        AvaloniaXamlLoader.Load(this);
    }

    public static readonly StyledProperty<string> TitleProperty =
        AvaloniaProperty.Register<TitleBar, string>(nameof(Title));

    public string Title
    {
        get => GetValue(TitleProperty);
        set => SetValue(TitleProperty, value);
    }

    public static readonly StyledProperty<IBrush> ButtonForegroundProperty =
        AvaloniaProperty.Register<TitleBar, IBrush>(nameof(ButtonForeground));

    public IBrush ButtonForeground
    {
        get => GetValue(ButtonForegroundProperty);
        set => SetValue(ButtonForegroundProperty, value);
    }

    public static new readonly StyledProperty<IBrush> ForegroundProperty =
        AvaloniaProperty.Register<TitleBar, IBrush>(nameof(Foreground));

    public new IBrush Foreground
    {
        get => GetValue(ForegroundProperty);
        set => SetValue(ForegroundProperty, value);
    }

    public static new readonly StyledProperty<IBrush> BackgroundProperty =
        AvaloniaProperty.Register<TitleBar, IBrush>(nameof(Background));

    public new IBrush Background
    {
        get => GetValue(BackgroundProperty);
        set => SetValue(BackgroundProperty, value);
    }

    //Close Button Command (X Button) Property
    public static readonly StyledProperty<ICommand> XButtonCommandProperty =
        AvaloniaProperty.Register<TitleBar, ICommand>(nameof(XButtonCommand));

    public ICommand XButtonCommand
    {
        get => GetValue(XButtonCommandProperty);
        set => SetValue(XButtonCommandProperty, value);
    }

    //Minimize Button Command (- Button) Property
    public static readonly StyledProperty<ICommand> MinButtonCommandProperty =
        AvaloniaProperty.Register<TitleBar, ICommand>(nameof(MinButtonCommand));

    public ICommand MinButtonCommand
    {
        get => GetValue(MinButtonCommandProperty);
        set => SetValue(MinButtonCommandProperty, value);
    }
}