// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.

import "EnumEntry.idl";
import "MainPage.idl";
import "Appearances.idl";
import "ColorSchemesPageViewModel.idl";

#include "ViewModelHelpers.idl.h"

#define OBSERVABLE_PROJECTED_PROFILE_SETTING(Type, Name) \
    OBSERVABLE_PROJECTED_SETTING(Type, Name);            \
    Object Name##OverrideSource { get; }

namespace Microsoft.Terminal.Settings.Editor
{
    runtimeclass DeleteProfileEventArgs
    {
        Guid ProfileGuid { get; };
    }

    runtimeclass BellSoundViewModel : Windows.UI.Xaml.Data.INotifyPropertyChanged
    {
        String Path { get; };
        String DisplayPath { get; };
        String SubText { get; };
        Boolean ShowDirectory { get; };
        Boolean FileExists { get; };
    }

    enum ProfileSubPage
    {
        Base = 0,
        Appearance = 1,
        Terminal = 2,
        Advanced = 3
    };

    runtimeclass ProfileViewModel : Windows.UI.Xaml.Data.INotifyPropertyChanged
    {
        event Windows.Foundation.TypedEventHandler<ProfileViewModel, DeleteProfileEventArgs> DeleteProfileRequested;

        void SetupAppearances(Windows.Foundation.Collections.IObservableVector<ColorSchemeViewModel> schemesList);

        void SetAcrylicOpacityPercentageValue(Double value);

        String BellStylePreview { get; };
        Boolean IsBellStyleFlagSet(UInt32 flag);
        void SetBellStyleAudible(Windows.Foundation.IReference<Boolean> on);
        void SetBellStyleWindow(Windows.Foundation.IReference<Boolean> on);
        void SetBellStyleTaskbar(Windows.Foundation.IReference<Boolean> on);

        String BellSoundPreview { get; };
        Windows.Foundation.Collections.IObservableVector<BellSoundViewModel> CurrentBellSounds { get; };
        void RequestAddBellSound(String path);
        void RequestDeleteBellSound(BellSoundViewModel vm);

        IInspectable CurrentAntiAliasingMode;
        Windows.Foundation.Collections.IObservableVector<Microsoft.Terminal.Settings.Editor.EnumEntry> AntiAliasingModeList { get; };

        IInspectable CurrentCloseOnExitMode;
        Windows.Foundation.Collections.IObservableVector<Microsoft.Terminal.Settings.Editor.EnumEntry> CloseOnExitModeList { get; };

        IInspectable CurrentScrollState;
        Windows.Foundation.Collections.IObservableVector<Microsoft.Terminal.Settings.Editor.EnumEntry> ScrollStateList { get; };

        Double LeftPadding { get; set; };
        Double TopPadding { get; set; };
        Double RightPadding { get; set; };
        Double BottomPadding { get; set; };

        IInspectable CurrentPathTranslationStyle;
        Windows.Foundation.Collections.IObservableVector<Microsoft.Terminal.Settings.Editor.EnumEntry> PathTranslationStyleList { get; };

        String CurrentStartingDirectoryPreview { get; };
        Boolean UseParentProcessDirectory;

        Boolean CanDeleteProfile { get; };
        Boolean FocusDeleteButton;
        Boolean IsBaseLayer;
        ProfileSubPage CurrentPage;
        AppearanceViewModel DefaultAppearance { get; };
        Guid OriginalProfileGuid { get; };
        Boolean HasUnfocusedAppearance { get; };
        Boolean EditableUnfocusedAppearance { get; };
        Boolean ShowUnfocusedAppearance { get; };
        AppearanceViewModel UnfocusedAppearance { get; };

        Boolean ShowMarksAvailable { get; };
        Boolean AutoMarkPromptsAvailable { get; };
        Boolean RepositionCursorWithMouseAvailable { get; };

        Windows.UI.Xaml.Controls.IconElement IconPreview { get; };
        String EvaluatedIcon { get; };
        String LocalizedIcon { get; };
        String IconPath;
        Boolean UsingNoIcon { get; };

        String TabTitlePreview { get; };
        String AnswerbackMessagePreview { get; };
        Windows.UI.Color TabColorPreview { get; };
        Windows.UI.Color TabThemeColorPreview { get; };

        void CreateUnfocusedAppearance();
        void DeleteUnfocusedAppearance();

        Boolean Orphaned { get; };
        OBSERVABLE_PROJECTED_PROFILE_SETTING(String, Name);
        PERMANENT_OBSERVABLE_PROJECTED_SETTING(Guid, Guid);
        OBSERVABLE_PROJECTED_PROFILE_SETTING(String, Source);
        PERMANENT_OBSERVABLE_PROJECTED_SETTING(Guid, ConnectionType);
        OBSERVABLE_PROJECTED_PROFILE_SETTING(Boolean, Hidden);
        OBSERVABLE_PROJECTED_PROFILE_SETTING(Microsoft.Terminal.Settings.Model.IMediaResource, Icon);
        OBSERVABLE_PROJECTED_PROFILE_SETTING(Microsoft.Terminal.Settings.Model.CloseOnExitMode, CloseOnExit);
        OBSERVABLE_PROJECTED_PROFILE_SETTING(String, TabTitle);
        OBSERVABLE_PROJECTED_PROFILE_SETTING(Windows.Foundation.IReference<Microsoft.Terminal.Core.Color>, TabColor);
        OBSERVABLE_PROJECTED_PROFILE_SETTING(Boolean, SuppressApplicationTitle);
        OBSERVABLE_PROJECTED_PROFILE_SETTING(Boolean, UseAcrylic);
        OBSERVABLE_PROJECTED_PROFILE_SETTING(Single, Opacity);
        OBSERVABLE_PROJECTED_PROFILE_SETTING(Microsoft.Terminal.Control.ScrollbarState, ScrollState);
        OBSERVABLE_PROJECTED_PROFILE_SETTING(String, Padding);
        OBSERVABLE_PROJECTED_PROFILE_SETTING(String, Commandline);
        OBSERVABLE_PROJECTED_PROFILE_SETTING(String, StartingDirectory);
        OBSERVABLE_PROJECTED_PROFILE_SETTING(Microsoft.Terminal.Control.TextAntialiasingMode, AntialiasingMode);
        OBSERVABLE_PROJECTED_PROFILE_SETTING(Int32, HistorySize);
        OBSERVABLE_PROJECTED_PROFILE_SETTING(Boolean, SnapOnInput);
        OBSERVABLE_PROJECTED_PROFILE_SETTING(Boolean, AltGrAliasing);
        OBSERVABLE_PROJECTED_PROFILE_SETTING(Microsoft.Terminal.Settings.Model.BellStyle, BellStyle);
        OBSERVABLE_PROJECTED_PROFILE_SETTING(Windows.Foundation.Collections.IVector<Microsoft.Terminal.Settings.Model.IMediaResource>, BellSound);
        OBSERVABLE_PROJECTED_PROFILE_SETTING(Boolean, Elevate);
        OBSERVABLE_PROJECTED_PROFILE_SETTING(Boolean, ReloadEnvironmentVariables);
        OBSERVABLE_PROJECTED_PROFILE_SETTING(Boolean, RightClickContextMenu);
        OBSERVABLE_PROJECTED_PROFILE_SETTING(Boolean, ShowMarks);
        OBSERVABLE_PROJECTED_PROFILE_SETTING(Boolean, AutoMarkPrompts);
        OBSERVABLE_PROJECTED_PROFILE_SETTING(Boolean, RepositionCursorWithMouse);
        OBSERVABLE_PROJECTED_PROFILE_SETTING(Boolean, ForceVTInput);
        OBSERVABLE_PROJECTED_PROFILE_SETTING(Boolean, AllowKittyKeyboardMode);
        OBSERVABLE_PROJECTED_PROFILE_SETTING(Boolean, AllowVtChecksumReport);
        OBSERVABLE_PROJECTED_PROFILE_SETTING(String, AnswerbackMessage);
        OBSERVABLE_PROJECTED_PROFILE_SETTING(Boolean, RainbowSuggestions);
        OBSERVABLE_PROJECTED_PROFILE_SETTING(Microsoft.Terminal.Control.PathTranslationStyle, PathTranslationStyle);
        OBSERVABLE_PROJECTED_PROFILE_SETTING(String, DragDropDelimiter);
        OBSERVABLE_PROJECTED_PROFILE_SETTING(Boolean, AllowVtClipboardWrite);
    }
}
