<windows:WindowBase x:Class="MPF.Windows.OptionsWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:MPF"
        xmlns:windows="clr-namespace:MPF.Windows"
        mc:Ignorable="d"
        Title="Options" Width="515.132" WindowStyle="None"
        WindowStartupLocation="CenterOwner" ResizeMode="CanMinimize" SizeToContent="Height"
        BorderBrush="DarkGray" BorderThickness="2">

    <WindowChrome.WindowChrome>
        <WindowChrome CaptionHeight="0" ResizeBorderThickness="0" />
    </WindowChrome.WindowChrome>

    <Grid>
        <StackPanel Orientation="Vertical">
            <Grid Margin="0,10,0,0">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="25"/>
                    <ColumnDefinition Width="115"/>
                    <ColumnDefinition/>
                    <ColumnDefinition/>
                    <ColumnDefinition/>
                    <ColumnDefinition Width="50"/>
                </Grid.ColumnDefinitions>

                <Image Grid.Column="0" Source="/Images/Icon.ico" Height="20" Width="20" Margin="1" />
                <Label Grid.Column="1" Grid.ColumnSpan="4" HorizontalAlignment="Stretch" HorizontalContentAlignment="Center" MouseDown="TitleMouseDown">
                    <Label.Content>
                        <TextBlock TextAlignment="Center"><Bold>Options</Bold></TextBlock>
                    </Label.Content>
                    <Label.ContextMenu>
                        <ContextMenu Background="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"
                                     Foreground="{DynamicResource {x:Static SystemColors.WindowTextBrushKey}}"
                                     Style="{DynamicResource CustomContextMenuStyle}">
                            <MenuItem Header="Minimize" Click="MinimizeButtonClick" Width="185"
                                      Background="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"
                                      Foreground="{DynamicResource {x:Static SystemColors.WindowTextBrushKey}}"
                                      Template="{DynamicResource CustomMenuItemTemplate}"/>
                            <MenuItem Header="Close" Click="CloseButtonClick" Width="185"
                                      Background="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"
                                      Foreground="{DynamicResource {x:Static SystemColors.WindowTextBrushKey}}"
                                      Template="{DynamicResource CustomMenuItemTemplate}"/>
                        </ContextMenu>
                    </Label.ContextMenu>
                </Label>
                <Grid Grid.Column="5">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition/>
                        <ColumnDefinition/>
                    </Grid.ColumnDefinitions>

                    <Button x:Name="MinimizeButton" Grid.Column="0" BorderThickness="0" Background="Transparent" Style="{DynamicResource CustomButtonStyle}" Click="MinimizeButtonClick">
                        <Path Data="M 0,0 L 10,0" Stroke="{Binding Path=Foreground,RelativeSource={RelativeSource AncestorType={x:Type Button}}}" StrokeThickness="1"/>
                    </Button>
                    <Button x:Name="CloseButton" Grid.Column="1" BorderThickness="0" Background="Transparent" Style="{DynamicResource CustomButtonStyle}" Click="CloseButtonClick">
                        <Path Data="M 0,0 L 12,12 M 0,12 L 12,0" Stroke="{Binding Path=Foreground,RelativeSource={RelativeSource AncestorType={x:Type Button}}}" StrokeThickness="1"/>
                    </Button>
                </Grid>
            </Grid>
            
            <TabControl Margin="5,5,5,5" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
                        Background="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"
                        Foreground="{DynamicResource {x:Static SystemColors.WindowTextBrushKey}}"
                        Style="{DynamicResource CustomTabControlStyle}">
                <TabItem Header="User Interface" Style="{DynamicResource CustomTabItemStyle}">
                    <UniformGrid Columns="2" Rows="3">
                        <CheckBox VerticalAlignment="Center" Content="Enable Dark Mode"
                            IsChecked="{Binding Options.EnableDarkMode}"
                            ToolTip="(Experimental) Enable dark mode across the entire application" Margin="0,4"
                            />

                        <CheckBox VerticalAlignment="Center" Content="Check for Updates on Startup"
                                  IsChecked="{Binding Options.CheckForUpdatesOnStartup}"
                                  ToolTip="Check for updates when the application starts" Margin="0,4"
                        />
                    </UniformGrid>
                </TabItem>
                
                <TabItem Header="Paths" Style="{DynamicResource CustomTabItemStyle}">
                    <Grid Margin="5,5,5,5">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="1*" />
                            <ColumnDefinition Width="2.0*" />
                            <ColumnDefinition Width="0.2*" />
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition/>
                            <RowDefinition/>
                            <RowDefinition/>
                            <RowDefinition/>
                            <RowDefinition/>
                        </Grid.RowDefinitions>

                        <Label Grid.Row="0" Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Right" Content="Aaru Path" />
                        <TextBox x:Name="AaruPathTextBox" Grid.Row="0" Grid.Column="1" Height="22" HorizontalAlignment="Stretch" Text="{Binding Options.AaruPath}" VerticalContentAlignment="Center" />
                        <Button x:Name="AaruPathButton" Grid.Row="0" Grid.Column="2" Height="22" Width="22" Content="..."
                                Style="{DynamicResource CustomButtonStyle}" />

                        <Label Grid.Row="1" Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Right" Content="DiscImageCreator Path" />
                        <TextBox x:Name="DiscImageCreatorPathTextBox" Grid.Row="1" Grid.Column="1" Height="22" HorizontalAlignment="Stretch" Text="{Binding Options.DiscImageCreatorPath}" VerticalContentAlignment="Center" />
                        <Button x:Name="DiscImageCreatorPathButton" Grid.Row="1" Grid.Column="2" Height="22" Width="22" Content="..."
                                Style="{DynamicResource CustomButtonStyle}" />

                        <Label Grid.Row="2" Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Right" Content="DD Path" />
                        <TextBox x:Name="DDPathTextBox" Grid.Row="2" Grid.Column="1" Height="22" HorizontalAlignment="Stretch" Text="{Binding Options.DDPath}" VerticalContentAlignment="Center" />
                        <Button x:Name="DDPathButton" Grid.Row="2" Grid.Column="2" Height="22" Width="22" Content="..."
                                Style="{DynamicResource CustomButtonStyle}" />

                        <Label Grid.Row="3" Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Right" Content="Dumping Program" />
                        <ComboBox x:Name="InternalProgramComboBox" Grid.Row="3" Grid.Column="1" Height="22" HorizontalAlignment="Stretch"
                                  ItemsSource="{Binding InternalPrograms}" Style="{DynamicResource CustomComboBoxStyle}" />

                        <Label Grid.Row="4" Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Right" Content="Default Output Path" />
                        <TextBox x:Name="DefaultOutputPathTextBox" Grid.Row="4" Grid.Column="1" Height="22" HorizontalAlignment="Stretch" Text="{Binding Options.DefaultOutputPath}" VerticalContentAlignment="Center" />
                        <Button x:Name="DefaultOutputPathButton" Grid.Row="4" Grid.Column="2" Height="22" Width="22" Content="..."
                                Style="{DynamicResource CustomButtonStyle}" />
                    </Grid>
                </TabItem>

                <TabItem Header="Dumping" Style="{DynamicResource CustomTabItemStyle}">
                    <StackPanel>
                        <GroupBox Margin="5,5,5,5" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Header="Dumping">
                            <UniformGrid Columns="2" Rows="8">
                                <CheckBox VerticalAlignment="Center" Content="Skip Type Detect"
                                     IsChecked="{Binding Options.SkipMediaTypeDetection}"
                                     ToolTip="Disable trying to guess media type inserted (may improve performance at startup)" Margin="0,4"
                                     />

                                <CheckBox VerticalAlignment="Center" Content="Skip System Detect"
                                     IsChecked="{Binding Options.SkipSystemDetection}"
                                     ToolTip="Disable trying to guess system (may improve performance at startup)" Margin="0,4"
                                     />

                                <Label VerticalAlignment="Center" Content="Default System:" HorizontalAlignment="Right" />
                                <ComboBox x:Name="DefaultSystemComboBox" Height="22" Width="200" HorizontalAlignment="Left" ItemsSource="{Binding Systems}" SelectedIndex="0" Style="{DynamicResource CustomComboBoxStyle}">
                                    <ComboBox.ItemContainerStyle>
                                        <Style TargetType="{x:Type ComboBoxItem}">
                                            <Style.Triggers>
                                                <DataTrigger Binding="{Binding IsHeader}" Value="True">
                                                    <Setter Property="IsEnabled" Value="False"/>
                                                </DataTrigger>
                                            </Style.Triggers>
                                        </Style>
                                    </ComboBox.ItemContainerStyle>
                                </ComboBox>

                                <CheckBox VerticalAlignment="Center" Content="No Fixed Drives"
                                     IsChecked="{Binding Options.IgnoreFixedDrives}"
                                     ToolTip="Ignore hard drives and other fixed drives" Margin="0,4"
                                     />

                                <CheckBox VerticalAlignment="Center" Content="Show Separate Window"
                                     IsChecked="{Binding Options.ToolsInSeparateWindow}"
                                     ToolTip="Show program output in separate command window instead of in the log. Enable this if you have a weaker system as there is an increased processing load otherwise." Margin="0,4"
                                     />

                                <CheckBox VerticalAlignment="Center" Content="Protection Scan"
                                    IsChecked="{Binding Options.ScanForProtection}"
                                    ToolTip="Enable automatic checking for copy protection on dumped media" Margin="0,4,0,0"
                                    />

                                <CheckBox VerticalAlignment="Center" Content="Eject After Dump"
                                    IsChecked="{Binding Options.EjectAfterDump}"
                                    ToolTip="Eject the disc from the drive after dumping has completed" Margin="0,4"
                                    />

                                <CheckBox VerticalAlignment="Center" Content="Show Disc Info"
                                     IsChecked="{Binding Options.PromptForDiscInformation}"
                                     ToolTip="Enable showing the disc information output after dumping" Margin="0,4"
                                      />

                                <CheckBox VerticalAlignment="Center" Content="Enable Tab Input"
                                          IsChecked="{Binding Options.EnableTabsInInputFields}"
                                          ToolTip="Enable entering tabs in supported input fields instead of tab navigation" Margin="0,4"
                                />

                                <CheckBox VerticalAlignment="Center" Content="Show Eject Reminder"
                                     IsChecked="{Binding Options.ShowDiscEjectReminder}"
                                     ToolTip="Enable showing the disc eject reminder after information is gathered" Margin="0,4"
                                      />

                                <CheckBox VerticalAlignment="Center" Content="Add Placeholders"
                                     IsChecked="{Binding Options.AddPlaceholders}"
                                     ToolTip="Enable adding placeholder text in the output for required and optional fields" Margin="0,4"
                                     />

                                <CheckBox VerticalAlignment="Center" Content="Output Submission JSON"
                                     IsChecked="{Binding Options.OutputSubmissionJSON}"
                                     ToolTip="Enable outputting a compressed JSON version of the submission info" Margin="0,4"
                                     />

                                <CheckBox VerticalAlignment="Center" Content="Include Artifacts"
                                     IsChecked="{Binding Options.IncludeArtifacts}"  IsEnabled="{Binding Options.OutputSubmissionJSON}"
                                     ToolTip="Include log files in serialized JSON data" Margin="0,4"
                                     />

                                <CheckBox VerticalAlignment="Center" Content="Compress Log Files"
                                     IsChecked="{Binding Options.CompressLogFiles}"
                                     ToolTip="Compress output log files to reduce space" Margin="0,4"
                                     />
                            </UniformGrid>
                        </GroupBox>
                        
                        <GroupBox Margin="5,5,5,5" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Header="Default Speeds" Grid.ColumnSpan="2">
                            <Grid>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="80"/>
                                    <ColumnDefinition Width="2.0*"/>
                                    <ColumnDefinition Width="40"/>
                                </Grid.ColumnDefinitions>

                                <Grid.RowDefinitions>
                                    <RowDefinition />
                                    <RowDefinition />
                                    <RowDefinition />
                                </Grid.RowDefinitions>
                                
                                <Label Grid.Row="0" Grid.Column="0" Content="CD-ROM" />
                                <Slider x:Name="DumpSpeedCDSlider" Grid.Row="0" Grid.Column="1" Minimum="1" Maximum="72" IsSnapToTickEnabled="True" TickPlacement="BottomRight"
                                    Ticks="{Binding Source={x:Static local:Constants.SpeedsForCDAsCollection}}"
                                    Value="{Binding Options.PreferredDumpSpeedCD}" />
                                <TextBox x:Name="DumpSpeedCDTextBox" Grid.Row="0" Grid.Column="2" Width="22" Height="22" TextAlignment="Center" IsReadOnly="True" IsReadOnlyCaretVisible="False" VerticalAlignment="Center"
                                    Text="{Binding ElementName=DumpSpeedCDSlider, Path=Value, UpdateSourceTrigger=PropertyChanged}" Background="LightGray" Foreground="Gray"/>

                                <Label Grid.Row="1" Grid.Column="0" Content="DVD-ROM" />
                                <Slider x:Name="DumpSpeedDVDSlider" Grid.Row="1" Grid.Column="1" Minimum="1" Maximum="24" IsSnapToTickEnabled="True" TickPlacement="BottomRight"
                                    Ticks="{Binding Source={x:Static local:Constants.SpeedsForDVDAsCollection}}"
                                    Value="{Binding Options.PreferredDumpSpeedDVD}"  />
                                <TextBox x:Name="DumpSpeedDVDTextBox" Grid.Row="1" Grid.Column="2" Width="22" Height="22" TextAlignment="Center" IsReadOnly="True" IsReadOnlyCaretVisible="False" VerticalAlignment="Center"
                                   Text="{Binding ElementName=DumpSpeedDVDSlider, Path=Value, UpdateSourceTrigger=PropertyChanged}" Background="LightGray" Foreground="Gray"/>

                                <Label Grid.Row="2" Grid.Column="0" Content="BD-ROM" />
                                <Slider x:Name="DumpSpeedBDSlider" Grid.Row="2" Grid.Column="1" Minimum="1" Maximum="16" IsSnapToTickEnabled="True" TickPlacement="BottomRight"
                                    Ticks="{Binding Source={x:Static local:Constants.SpeedsForBDAsCollection}}"
                                    Value="{Binding Options.PreferredDumpSpeedBD}"  />
                                <TextBox x:Name="DumpSpeedBDTextBox" Grid.Row="2" Grid.Column="2" Width="22" Height="22" TextAlignment="Center" IsReadOnly="True" IsReadOnlyCaretVisible="False" VerticalAlignment="Center"
                                   Text="{Binding ElementName=DumpSpeedBDSlider, Path=Value, UpdateSourceTrigger=PropertyChanged}" Background="LightGray" Foreground="Gray"/>
                            </Grid>
                        </GroupBox>
                    </StackPanel>
                </TabItem>

                <TabItem Header="Protection Scanning" Style="{DynamicResource CustomTabItemStyle}">
                    <StackPanel>
                        <UniformGrid Columns="2" Rows="2">
                            <CheckBox VerticalAlignment="Center" Content="Scan Archive Contents"
                                     IsChecked="{Binding Options.ScanArchivesForProtection}"
                                     ToolTip="Enable scanning archive contents during protection scanning (may drastically increase scanning time but is more accurate)" Margin="0,4"
                                     />

                            <CheckBox VerticalAlignment="Center" Content="Include Executable Packers"
                                     IsChecked="{Binding Options.ScanPackersForProtection}"
                                     ToolTip="Include executable packers in outputted protections" Margin="0,4"
                                     />

                            <CheckBox VerticalAlignment="Center" Content="Force Scanning All Files"
                                     IsChecked="{Binding Options.ForceScanningForProtection}"
                                     ToolTip="Force scanning all files even if they're not executables" Margin="0,4"
                                     />

                            <CheckBox VerticalAlignment="Center" Content="Include Debug Information"
                                     IsChecked="{Binding Options.IncludeDebugProtectionInformation}"
                                     ToolTip="Include debug information during protection scans" Margin="0,4"
                                     />
                        </UniformGrid>
                    </StackPanel>
                </TabItem>

                <TabItem Header="Aaru" Style="{DynamicResource CustomTabItemStyle}">
                    <UniformGrid Columns="2" Rows="3">
                        <CheckBox VerticalAlignment="Center" Content="Enable Debug Output"
                            IsChecked="{Binding Options.AaruEnableDebug}"
                            ToolTip="Enable debug output in logs" Margin="0,4"
                            />

                        <CheckBox VerticalAlignment="Center" Content="Enable Verbose Output"
                            IsChecked="{Binding Options.AaruEnableVerbose}"
                            ToolTip="Enable verbose output in logs" Margin="0,4"
                            />

                        <CheckBox VerticalAlignment="Center" Content="Force Dumping"
                            IsChecked="{Binding Options.AaruForceDumping}"
                            ToolTip="Enable forcing dump even if there are issues" Margin="0,4"
                            />

                        <CheckBox VerticalAlignment="Center" Content="Strip Personal Data"
                            IsChecked="{Binding Options.AaruStripPersonalData}"
                            ToolTip="Enable stripping of personally identifiable information from metadata" Margin="0,4,0,0"
                            />

                        <Label Content="Reread Tries:" VerticalAlignment="Center" HorizontalAlignment="Right"/>
                        <TextBox VerticalAlignment="Center" VerticalContentAlignment="Center"
                            Text="{Binding Options.AaruRereadCount}"
                            ToolTip="Specifies how many rereads are attempted for sector and subchannel errors"
                            />
                    </UniformGrid>
                </TabItem>

                <TabItem Header="DiscImageCreator" Style="{DynamicResource CustomTabItemStyle}">
                    <UniformGrid Columns="2" Rows="3">
                        <CheckBox VerticalAlignment="Center" Content="Quiet Mode"
                            IsChecked="{Binding Options.DICQuietMode}"
                            ToolTip="Disable sounds (beeps) during and after operations" Margin="0,4"
                            />

                        <CheckBox VerticalAlignment="Center" Content="Paranoid Mode"
                            IsChecked="{Binding Options.DICParanoidMode}"
                            ToolTip="Enable pedantic and super-safe flags" Margin="0,4"
                            />

                        <CheckBox VerticalAlignment="Center" Content="Use CMI Flag"
                            IsChecked="{Binding Options.DICUseCMIFlag}"
                            ToolTip="Enable the CMI flag for supported disc types (DVD/HD-DVD only)" Margin="0,4"
                            />

                        <CheckBox VerticalAlignment="Center" Content="Reset After Dump"
                            IsChecked="{Binding Options.DICResetDriveAfterDump}"
                            ToolTip="Reset disc drives after dumping; useful for some older machines" Margin="0,4"
                            />

                        <Label Content="Reread Tries:" VerticalAlignment="Center" HorizontalAlignment="Right"/>
                        <TextBox VerticalAlignment="Center" VerticalContentAlignment="Center"
                            Text="{Binding Options.DICRereadCount}"
                            ToolTip="Specifies how many rereads are attempted on C2 error"
                            />
                    </UniformGrid>
                </TabItem>

                <TabItem Header="Logging" Style="{DynamicResource CustomTabItemStyle}">
                    <UniformGrid Columns="2">
                        <CheckBox VerticalAlignment="Center" Content="Verbose Logging"
                            IsChecked="{Binding Options.VerboseLogging}"
                            ToolTip="Display all logging statements" Margin="0,4"
                            />

                        <CheckBox VerticalAlignment="Center" Content="Auto-Open Log"
                            IsChecked="{Binding Options.OpenLogWindowAtStartup}"
                            ToolTip="Open the log panel when the program launches" Margin="0,4"
                            />

                        <CheckBox VerticalAlignment="Center" Content="Enable Log Formatting"
                            IsChecked="{Binding Options.EnableLogFormatting}"
                            ToolTip="Format log lines written to the log, including overwriting previous lines on match. Disable this if you have a weaker system as there is an increased processing load otherwise." Margin="0,4"
                            />
                        
                        <CheckBox VerticalAlignment="Center" Content="Enable Progress Processing"
                            IsChecked="{Binding Options.EnableProgressProcessing}" IsEnabled="{Binding Options.EnableLogFormatting}"
                            ToolTip="Process lines written to the log to update the progress bar. Disable this if you have a weaker system as there is an increased processing load otherwise." Margin="0,4"
                            />
                    </UniformGrid>
                </TabItem>

                <TabItem Header="Login Info" Style="{DynamicResource CustomTabItemStyle}">
                    <StackPanel>
                        <GroupBox Margin="5,5,5,5" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Header="Redump Credentials">
                            <UniformGrid Columns="5" Rows="1">
                                <Label VerticalAlignment="Center" HorizontalAlignment="Right" Content="Username" />
                                <TextBox x:Name="RedumpUsernameTextBox" Height="22" HorizontalAlignment="Stretch"
                                    Text="{Binding Options.RedumpUsername}" />

                                <Label VerticalAlignment="Center" HorizontalAlignment="Right" Content="Password" />
                                <PasswordBox x:Name="RedumpPasswordBox" Height="22" HorizontalAlignment="Stretch" PasswordChar="*" />

                                <Button x:Name="RedumpLoginTestButton" Height="22" Width="80" Content="Test Login"
                                        Style="{DynamicResource CustomButtonStyle}" />
                            </UniformGrid>
                        </GroupBox>
                    </StackPanel>
                </TabItem>
            </TabControl>

            <!-- Accept / Cancel -->
            <GroupBox Margin="5,5,5,5" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                <UniformGrid Columns="4" Margin="5,5,5,5" Height="28">
                    <Label/> <!-- Empty label for padding -->
                    <Button Name="AcceptButton" Height="25" Width="80" IsDefault="True" Content="Accept"
                            Style="{DynamicResource CustomButtonStyle}" />
                    <Button Name="CancelButton" Height="25" Width="80" IsCancel="True" Content="Cancel"
                            Style="{DynamicResource CustomButtonStyle}" />
                    <Label/> <!-- Empty label for padding -->
                </UniformGrid>
            </GroupBox>
        </StackPanel>
    </Grid>
</windows:WindowBase>
