<Page
    x:Class="Microsoft.PowerToys.Settings.UI.Views.GeneralPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:Microsoft.PowerToys.Settings.UI.Views"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:converters="using:Microsoft.Toolkit.Uwp.UI.Converters"
    xmlns:muxc="using:Microsoft.UI.Xaml.Controls"
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
    AutomationProperties.LandmarkType="Main">

    <Page.Resources>
        <converters:BoolToObjectConverter x:Key="BoolToVisibilityConverter" TrueValue="Collapsed" FalseValue="Visible"/>
        <converters:BoolToVisibilityConverter x:Key="VisibleIfTrueConverter"/>
    </Page.Resources>

    <Grid RowSpacing="{StaticResource DefaultRowSpacing}">
        <VisualStateManager.VisualStateGroups>
            <VisualStateGroup x:Name="LayoutVisualStates">
                <VisualState x:Name="WideLayout">
                    <VisualState.StateTriggers>
                        <AdaptiveTrigger MinWindowWidth="{StaticResource WideLayoutMinWidth}" />
                    </VisualState.StateTriggers>
                </VisualState>
                <VisualState x:Name="SmallLayout">
                    <VisualState.StateTriggers>
                        <AdaptiveTrigger MinWindowWidth="{StaticResource SmallLayoutMinWidth}" />
                        <AdaptiveTrigger MinWindowWidth="0" />
                    </VisualState.StateTriggers>
                    <VisualState.Setters>
                        <Setter Target="SidePanel.(Grid.Column)" Value="0"/>
                        <Setter Target="SidePanel.Width" Value="Auto"/>
                        <Setter Target="GeneralView.(Grid.Row)" Value="1" />
                        <Setter Target="LinksPanel.(RelativePanel.RightOf)" Value="AboutImage"/>
                        <Setter Target="LinksPanel.(RelativePanel.AlignTopWith)" Value="AboutImage"/>
                        <Setter Target="AboutImage.Margin" Value="0,12,12,0"/>
                        <Setter Target="AboutTitle.Visibility" Value="Collapsed" />
                    </VisualState.Setters>
                </VisualState>
            </VisualStateGroup>
        </VisualStateManager.VisualStateGroups>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>

        <StackPanel Orientation="Vertical" 
                    x:Name="GeneralView">
            <TextBlock x:Uid="Admin_Mode" 
                       FontWeight="SemiBold"
                       TextWrapping="Wrap"
                       AutomationProperties.HeadingLevel="Level2"
                       Style="{StaticResource SubtitleTextBlockStyle}"/>

            <TextBlock Text="{x:Bind Mode=TwoWay, Path=ViewModel.RunningAsText}"
                       TextWrapping="Wrap"
                       Margin="{StaticResource SmallTopMargin}"/>

            <Button x:Uid="GeneralPage_RestartAsAdmin_Button"
                    Margin="{StaticResource SmallTopMargin}"
                    Style="{StaticResource AccentButtonStyle}"
                    Command = "{Binding RestartElevatedButtonEventHandler}"
                    IsEnabled="{Binding Mode=TwoWay, Path=IsAdminButtonEnabled}"
                    />

            <TextBlock x:Uid="General_RunAsAdminRequired"
                       Foreground="{ThemeResource SystemControlErrorTextForegroundBrush}"
                       TextWrapping="Wrap"
                       Visibility="{Binding Mode=TwoWay, Path=IsElevated, Converter={StaticResource BoolToVisibilityConverter}}"
                       Margin="0,24,0,-8" />

            <ToggleSwitch Margin="{StaticResource SmallTopMargin}"
                          x:Uid="GeneralSettings_AlwaysRunAsAdminText"
                          IsEnabled="{Binding Mode=TwoWay, Path=IsElevated}"
                          IsOn="{Binding Mode=TwoWay, Path=RunElevated}"/>

            <HyperlinkButton NavigateUri="https://aka.ms/powertoysDetectedElevatedHelp">
                <TextBlock x:Uid="GeneralPage_ToggleSwitch_AlwaysRunElevated_Link" TextWrapping="Wrap" />
            </HyperlinkButton>


            <TextBlock x:Uid="ShortcutGuide_Appearance_Behavior"
                       Style="{StaticResource SettingsGroupTitleStyle}"/>

            <!-- Replaced the Radiobuttons parent control with a StackPanel to mitigate the Tab and Arrow key related keyboard navigation issues due to XAML Islands
            Tracking issue in the winui repository - https://github.com/microsoft/microsoft-ui-xaml/issues/3156 -->
            <TextBlock x:Name="RadioButtons_Name_Theme" 
                       x:Uid="ColorModeHeader"
                       Margin="{StaticResource SmallTopMargin}"/>
            <StackPanel AutomationProperties.LabeledBy="{Binding ElementName=RadioButtons_Name_Theme}">
                <RadioButton x:Uid="Radio_Theme_Dark"
                             IsChecked="{ Binding Mode=TwoWay, Path=IsDarkThemeRadioButtonChecked}"/>

                <RadioButton x:Uid="Radio_Theme_Light" 
                             IsChecked="{ Binding Mode=TwoWay, Path=IsLightThemeRadioButtonChecked}"/>

                <RadioButton x:Uid="Radio_Theme_Default"
                             IsChecked="{ Binding Mode=TwoWay, Path=IsSystemThemeRadioButtonChecked}"/>
                <HyperlinkButton NavigateUri="ms-settings:colors">
                    <TextBlock x:Uid="Windows_Color_Settings" />
                </HyperlinkButton>
            </StackPanel>

            <ToggleSwitch x:Uid="GeneralPage_ToggleSwitch_RunAtStartUp"  
                          Margin="{StaticResource SmallTopMargin}" 
                          IsOn="{Binding Mode=TwoWay, Path=Startup}"/>



            <TextBlock x:Uid="General_Updates"
                       Style="{StaticResource SettingsGroupTitleStyle}"/>
            <StackPanel Orientation="Horizontal" 
                        Margin="{StaticResource SmallTopMargin}"
                        AutomationProperties.LabeledBy="{Binding ElementName=General_Version}">
                <TextBlock x:Name="General_Version" x:Uid="General_Version" />
                <HyperlinkButton NavigateUri="https://github.com/microsoft/PowerToys/releases" Margin="4,-6,0,0">
                    <TextBlock Text="{x:Bind ViewModel.PowerToysVersion }" />
                </HyperlinkButton>
                <TextBlock Text="{x:Bind ViewModel.LatestAvailableVersion, Mode=OneWay}"
                           Foreground="{ThemeResource SystemControlErrorTextForegroundBrush}"
                           Margin="16,0,0,0" />
            </StackPanel>

            <StackPanel Orientation="Horizontal" 
                        Margin="{StaticResource SmallBottomMargin}"
                        AutomationProperties.LabeledBy="{Binding ElementName=General_VersionLastChecked}">
                 <TextBlock x:Name="General_VersionLastChecked" x:Uid="General_VersionLastChecked" />
                 <TextBlock Text="{x:Bind ViewModel.UpdateCheckedDate, Mode=OneWay}"
                            Foreground="{ThemeResource ListViewItemForegroundPointerOver}"
                            Margin="6,0" />
            </StackPanel>

            <Button x:Uid="GeneralPage_CheckForUpdates"
                    Style="{StaticResource AccentButtonStyle}"
                    Foreground="White"
                    Command="{Binding CheckForUpdatesEventHandler}"
                    />

            <ToggleSwitch x:Uid="GeneralPage_ToggleSwitch_AutoDownloadUpdates" 
                          Margin="{StaticResource MediumTopMargin}"
                          Visibility="{Binding Mode=TwoWay, Path=IsAdmin, Converter={StaticResource VisibleIfTrueConverter}}"
                          IsOn="{Binding Mode=TwoWay, Path=AutoDownloadUpdates}"/>

        </StackPanel>

        <RelativePanel x:Name="SidePanel" 
                    HorizontalAlignment="Left"
                    Width="{StaticResource SidePanelWidth}"
                    Grid.Column="1">
            <StackPanel x:Name="DescriptionPanel">
                <TextBlock x:Uid="GeneralPage_AboutPowerToysHeader" 
                           x:Name="AboutTitle" 
                           Grid.ColumnSpan="2"
                           Style="{StaticResource SettingsGroupTitleStyle}"
                           Margin="{StaticResource XSmallBottomMargin}"/>
                <TextBlock x:Uid="About_PowerToys" TextWrapping="Wrap" />
                <TextBlock x:Uid="MadeWithOssLove" TextWrapping="Wrap" Margin="0, 10, 0, 0" />
            </StackPanel>

            <Border x:Name="AboutImage"
                    CornerRadius="4"
                    Grid.Row="2"
                    MaxWidth="240"
                    HorizontalAlignment="Left"
                    Margin="{StaticResource SmallTopBottomMargin}"
                    RelativePanel.Below="DescriptionPanel">
                <Image x:Uid="PowerToys_Icon" Source="ms-appx:///Assets/Modules/PT.png"/>
            </Border>
            <StackPanel x:Name="LinksPanel"
                        Margin="0,1,0,0"
                        RelativePanel.Below="AboutImage"
                        Orientation="Vertical" >

                <HyperlinkButton NavigateUri="https://github.com/microsoft/PowerToys/">
                    <TextBlock x:Uid="General_Repository"/>
                </HyperlinkButton>

                <HyperlinkButton NavigateUri="https://github.com/microsoft/PowerToys/issues">
                    <TextBlock x:Uid="GeneralPage_ReportAbug"/>
                </HyperlinkButton>

                <HyperlinkButton NavigateUri="https://github.com/microsoft/PowerToys/issues">
                    <TextBlock x:Uid="GeneralPage_RequestAFeature_URL"/>
                </HyperlinkButton>

                <HyperlinkButton NavigateUri=" http://go.microsoft.com/fwlink/?LinkId=521839">
                    <TextBlock x:Uid="GeneralPage_PrivacyStatement_URL"/>
                </HyperlinkButton>

                <HyperlinkButton NavigateUri="https://github.com/microsoft/PowerToys/blob/master/NOTICE.md">
                    <TextBlock x:Uid="OpenSource_Notice"/>
                </HyperlinkButton>
            </StackPanel>
        </RelativePanel>
    </Grid>
</Page>