using CommunityToolkit.Mvvm.ComponentModel;
using Ryujinx.Ava.UI.ViewModels;
using Ryujinx.Common.Configuration.Hid;

namespace Ryujinx.Ava.UI.Models.Input
{
    public partial class HotkeyConfig : BaseModel
    {
        [ObservableProperty] private Key _toggleVSyncMode;

        [ObservableProperty] private Key _screenshot;

        [ObservableProperty] private Key _showUI;

        [ObservableProperty] private Key _pause;

        [ObservableProperty] private Key _toggleMute;

        [ObservableProperty] private Key _resScaleUp;

        [ObservableProperty] private Key _resScaleDown;

        [ObservableProperty] private Key _volumeUp;

        [ObservableProperty] private Key _volumeDown;

        [ObservableProperty] private Key _customVSyncIntervalIncrement;

        [ObservableProperty] private Key _customVSyncIntervalDecrement;

        [ObservableProperty] private Key _turboMode;

        [ObservableProperty] private bool _turboModeWhileHeld;

        public HotkeyConfig(KeyboardHotkeys config)
        {
            if (config == null)
                return;

            ToggleVSyncMode = config.ToggleVSyncMode;
            Screenshot = config.Screenshot;
            ShowUI = config.ShowUI;
            Pause = config.Pause;
            ToggleMute = config.ToggleMute;
            ResScaleUp = config.ResScaleUp;
            ResScaleDown = config.ResScaleDown;
            VolumeUp = config.VolumeUp;
            VolumeDown = config.VolumeDown;
            CustomVSyncIntervalIncrement = config.CustomVSyncIntervalIncrement;
            CustomVSyncIntervalDecrement = config.CustomVSyncIntervalDecrement;
            TurboMode = config.TurboMode;
            TurboModeWhileHeld = config.TurboModeWhileHeld;
        }

        public KeyboardHotkeys GetConfig() =>
            new()
            {
                ToggleVSyncMode = ToggleVSyncMode,
                Screenshot = Screenshot,
                ShowUI = ShowUI,
                Pause = Pause,
                ToggleMute = ToggleMute,
                ResScaleUp = ResScaleUp,
                ResScaleDown = ResScaleDown,
                VolumeUp = VolumeUp,
                VolumeDown = VolumeDown,
                CustomVSyncIntervalIncrement = CustomVSyncIntervalIncrement,
                CustomVSyncIntervalDecrement = CustomVSyncIntervalDecrement,
                TurboMode = TurboMode,
                TurboModeWhileHeld = TurboModeWhileHeld
            };
    }
}
