// Copyright (c) Microsoft Corporation
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.

using System.Text.Json;
using System.Text.Json.Serialization;

namespace Microsoft.PowerToys.Settings.UI.Library
{
    // Needs to be kept in sync with src\modules\alwaysontop\AlwaysOnTop\Settings.h
    public class AlwaysOnTopProperties
    {
        public static readonly HotkeySettings DefaultHotkeyValue = new HotkeySettings(true, true, false, false, 0x54);
        public const bool DefaultFrameEnabled = true;
        public const int DefaultFrameThickness = 15;
        public const string DefaultFrameColor = "#0099cc";
        public const bool DefaultSoundEnabled = true;
        public const bool DefaultDoNotActivateOnGameMode = true;
        public const bool DefaultFrameAccentColor = true;

        public AlwaysOnTopProperties()
        {
            Hotkey = new KeyboardKeysProperty(DefaultHotkeyValue);
            FrameEnabled = new BoolProperty(DefaultFrameEnabled);
            FrameThickness = new IntProperty(DefaultFrameThickness);
            FrameColor = new StringProperty(DefaultFrameColor);
            SoundEnabled = new BoolProperty(DefaultSoundEnabled);
            DoNotActivateOnGameMode = new BoolProperty(DefaultDoNotActivateOnGameMode);
            ExcludedApps = new StringProperty();
            FrameAccentColor = new BoolProperty(DefaultFrameAccentColor);
        }

        [JsonPropertyName("hotkey")]
        public KeyboardKeysProperty Hotkey { get; set; }

        [JsonPropertyName("frame-enabled")]
        public BoolProperty FrameEnabled { get; set; }

        [JsonPropertyName("frame-thickness")]
        public IntProperty FrameThickness { get; set; }

        [JsonPropertyName("frame-color")]
        public StringProperty FrameColor { get; set; }

        [JsonPropertyName("sound-enabled")]
        public BoolProperty SoundEnabled { get; set; }

        [JsonPropertyName("do-not-activate-on-game-mode")]
        public BoolProperty DoNotActivateOnGameMode { get; set; }

        [JsonPropertyName("excluded-apps")]
        public StringProperty ExcludedApps { get; set; }

        [JsonPropertyName("frame-accent-color")]
        public BoolProperty FrameAccentColor { get; set; }

        public string ToJsonString()
        {
            return JsonSerializer.Serialize(this);
        }
    }
}
