<Window xmlns="https://github.com/avaloniaui"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:vm="using:ClaudeDo.Ui.ViewModels.Modals"
        xmlns:settings="using:ClaudeDo.Ui.ViewModels.Modals.Settings"
        xmlns:conv="using:ClaudeDo.Ui.Converters"
        xmlns:ctl="using:ClaudeDo.Ui.Views.Controls"
        x:Class="ClaudeDo.Ui.Views.Modals.SettingsModalView"
        x:DataType="vm:SettingsModalViewModel"
        Title="Settings"
        Width="580" Height="760"
        WindowDecorations="None"
        ExtendClientAreaToDecorationsHint="True"
        WindowStartupLocation="CenterOwner"
        Background="{DynamicResource SurfaceBrush}">

  <Window.KeyBindings>
    <KeyBinding Gesture="Escape" Command="{Binding CancelCommand}"/>
  </Window.KeyBindings>

  <Window.Resources>
    <conv:DateOnlyToDateTimeConverter x:Key="DateOnlyToDateTime"/>
    <conv:TimeSpanToHhmmConverter x:Key="TimeSpanToHhmm"/>
  </Window.Resources>

  <Window.Styles>
    <Style Selector="TextBlock.section-label">
      <Setter Property="FontFamily" Value="{DynamicResource MonoFont}"/>
      <Setter Property="FontSize" Value="10"/>
      <Setter Property="LetterSpacing" Value="1.4"/>
      <Setter Property="Foreground" Value="{DynamicResource TextFaintBrush}"/>
      <Setter Property="Margin" Value="4,0,0,6"/>
    </Style>
    <Style Selector="TextBlock.field-label">
      <Setter Property="FontSize" Value="11"/>
      <Setter Property="Foreground" Value="{DynamicResource TextDimBrush}"/>
      <Setter Property="Margin" Value="0,0,0,4"/>
    </Style>
    <Style Selector="TextBlock.path-mono">
      <Setter Property="FontFamily" Value="{DynamicResource MonoFont}"/>
      <Setter Property="FontSize" Value="11"/>
      <Setter Property="Foreground" Value="{DynamicResource TextDimBrush}"/>
      <Setter Property="TextTrimming" Value="CharacterEllipsis"/>
    </Style>
    <Style Selector="Button.danger">
      <Setter Property="Background" Value="{DynamicResource BloodBrush}"/>
      <Setter Property="Foreground" Value="White"/>
    </Style>
    <Style Selector="Button.primary">
      <Setter Property="Background" Value="{DynamicResource AccentBrush}"/>
      <Setter Property="Foreground" Value="{DynamicResource DeepBrush}"/>
      <Setter Property="FontWeight" Value="SemiBold"/>
    </Style>
  </Window.Styles>

  <Border Background="{DynamicResource SurfaceBrush}"
          BorderBrush="{DynamicResource LineBrush}"
          BorderThickness="1">
    <Grid RowDefinitions="36,*,52">

      <!-- Title bar -->
      <Border Grid.Row="0" x:Name="TitleBar"
              Background="{DynamicResource DeepBrush}"
              BorderBrush="{DynamicResource LineBrush}"
              BorderThickness="0,0,0,1"
              PointerPressed="TitleBar_PointerPressed">
        <Grid ColumnDefinitions="*,Auto" Margin="14,0">
          <TextBlock Text="SETTINGS"
                     FontFamily="{DynamicResource MonoFont}"
                     FontSize="11"
                     LetterSpacing="1.4"
                     Foreground="{DynamicResource TextBrush}"
                     VerticalAlignment="Center"/>
          <Button Grid.Column="1" Classes="icon-btn" Content="✕" FontSize="12"
                  Command="{Binding CancelCommand}" VerticalAlignment="Center"/>
        </Grid>
      </Border>

      <!-- Body: tabs + bottom validation/status strip -->
      <DockPanel Grid.Row="1">
        <StackPanel DockPanel.Dock="Bottom" Margin="20,0,20,8" Spacing="2">
          <TextBlock Text="{Binding ValidationError}"
                     Foreground="{DynamicResource BloodBrush}" FontSize="11"
                     IsVisible="{Binding ValidationError, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"/>
          <TextBlock Text="{Binding StatusMessage}"
                     Foreground="{DynamicResource TextDimBrush}" FontSize="11"
                     IsVisible="{Binding StatusMessage, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"/>
        </StackPanel>

        <TabControl Padding="20,12" TabStripPlacement="Top">

          <TabItem Header="General">
            <ScrollViewer>
              <StackPanel Spacing="12" Margin="0,8,0,0">
                <StackPanel Spacing="4">
                  <TextBlock Classes="field-label" Text="Default instructions"/>
                  <TextBox AcceptsReturn="True" TextWrapping="Wrap" Height="110"
                           PlaceholderText="Baseline instructions applied to every task"
                           Text="{Binding General.DefaultClaudeInstructions, Mode=TwoWay}"/>
                </StackPanel>
                <Grid ColumnDefinitions="*,12,*,12,*">
                  <StackPanel Grid.Column="0" Spacing="4">
                    <TextBlock Classes="field-label" Text="Model"/>
                    <ComboBox ItemsSource="{Binding General.Models}"
                              SelectedItem="{Binding General.DefaultModel, Mode=TwoWay}"
                              HorizontalAlignment="Stretch"/>
                  </StackPanel>
                  <StackPanel Grid.Column="2" Spacing="4">
                    <TextBlock Classes="field-label" Text="Max turns"/>
                    <NumericUpDown Value="{Binding General.DefaultMaxTurns, Mode=TwoWay}"
                                   Minimum="1" Maximum="200" Increment="1" FormatString="0"/>
                  </StackPanel>
                  <StackPanel Grid.Column="4" Spacing="4">
                    <TextBlock Classes="field-label" Text="Permission"/>
                    <ComboBox ItemsSource="{Binding General.PermissionModes}"
                              SelectedItem="{Binding General.DefaultPermissionMode, Mode=TwoWay}"
                              HorizontalAlignment="Stretch"/>
                  </StackPanel>
                </Grid>
              </StackPanel>
            </ScrollViewer>
          </TabItem>

          <TabItem Header="Worktrees">
            <ScrollViewer>
              <StackPanel Spacing="12" Margin="0,8,0,0">
                <Grid ColumnDefinitions="*,12,2*">
                  <StackPanel Grid.Column="0" Spacing="4">
                    <TextBlock Classes="field-label" Text="Strategy"/>
                    <ComboBox ItemsSource="{Binding Worktrees.WorktreeStrategies}"
                              SelectedItem="{Binding Worktrees.WorktreeStrategy, Mode=TwoWay}"
                              HorizontalAlignment="Stretch"/>
                  </StackPanel>
                  <StackPanel Grid.Column="2" Spacing="4">
                    <TextBlock Classes="field-label" Text="Central worktree root"/>
                    <TextBox Text="{Binding Worktrees.CentralWorktreeRoot, Mode=TwoWay}"
                             PlaceholderText="e.g. C:\worktrees"/>
                  </StackPanel>
                </Grid>
                <StackPanel Orientation="Horizontal" Spacing="8">
                  <CheckBox IsChecked="{Binding Worktrees.WorktreeAutoCleanupEnabled, Mode=TwoWay}"
                            Content="Auto-cleanup finished worktrees after"
                            VerticalAlignment="Center"/>
                  <NumericUpDown Value="{Binding Worktrees.WorktreeAutoCleanupDays, Mode=TwoWay}"
                                 Width="130" Minimum="1" Maximum="365" Increment="1" FormatString="0"
                                 IsEnabled="{Binding Worktrees.WorktreeAutoCleanupEnabled}"/>
                  <TextBlock Text="days" VerticalAlignment="Center" Foreground="{DynamicResource TextDimBrush}"/>
                </StackPanel>
                <Border BorderBrush="{DynamicResource LineBrush}" BorderThickness="0,1,0,0" Margin="0,4,0,0"/>
                <StackPanel Spacing="8">
                  <Button Content="Cleanup finished worktrees"
                          Command="{Binding Worktrees.CleanupWorktreesCommand}"
                          HorizontalAlignment="Left"/>
                  <StackPanel>
                    <Button Content="Force-remove all worktrees" Classes="danger"
                            Command="{Binding Worktrees.RequestResetConfirmCommand}"
                            HorizontalAlignment="Left"
                            IsVisible="{Binding !Worktrees.ShowResetConfirm}"/>
                    <Border BorderBrush="{DynamicResource BloodBrush}" BorderThickness="1"
                            CornerRadius="6" Padding="12,10"
                            IsVisible="{Binding Worktrees.ShowResetConfirm}">
                      <StackPanel Spacing="8">
                        <TextBlock Text="Remove ALL worktrees? Uncommitted work will be lost."
                                   Foreground="{DynamicResource TextBrush}" TextWrapping="Wrap"/>
                        <StackPanel Orientation="Horizontal" Spacing="8">
                          <Button Content="Cancel" Command="{Binding Worktrees.CancelResetConfirmCommand}"/>
                          <Button Content="Remove All" Classes="danger"
                                  Command="{Binding Worktrees.ConfirmResetAllCommand}"/>
                        </StackPanel>
                      </StackPanel>
                    </Border>
                  </StackPanel>
                </StackPanel>
                <TextBlock Text="{Binding Worktrees.StatusMessage}"
                           Foreground="{DynamicResource TextDimBrush}" FontSize="11"
                           IsVisible="{Binding Worktrees.StatusMessage, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"/>
              </StackPanel>
            </ScrollViewer>
          </TabItem>

          <TabItem Header="Files">
            <ScrollViewer>
              <StackPanel Spacing="14" Margin="0,8,0,0">
                <StackPanel Spacing="6">
                  <TextBlock Classes="section-label" Text="AGENTS"/>
                  <TextBlock Text="Restore bundled default agents. Existing files are not overwritten."
                             FontSize="11" TextWrapping="Wrap"
                             Foreground="{DynamicResource TextDimBrush}"/>
                  <Button Content="Restore default agents"
                          Command="{Binding Files.RestoreDefaultAgentsCommand}"
                          IsEnabled="{Binding !Files.IsBusy}"
                          HorizontalAlignment="Left"/>
                </StackPanel>
                <StackPanel Spacing="6">
                  <TextBlock Classes="section-label" Text="PROMPTS"/>
                  <Grid RowDefinitions="Auto,Auto,Auto" ColumnDefinitions="90,*,Auto" RowSpacing="8">
                    <TextBlock Grid.Row="0" Grid.Column="0" Classes="field-label" Text="System" VerticalAlignment="Center"/>
                    <TextBlock Grid.Row="0" Grid.Column="1" Classes="path-mono" Text="{Binding Files.SystemPromptPath}" VerticalAlignment="Center"/>
                    <Button Grid.Row="0" Grid.Column="2" Content="Open in editor"
                            Command="{Binding Files.OpenPromptCommand}" CommandParameter="System"/>
                    <TextBlock Grid.Row="1" Grid.Column="0" Classes="field-label" Text="Planning" VerticalAlignment="Center"/>
                    <TextBlock Grid.Row="1" Grid.Column="1" Classes="path-mono" Text="{Binding Files.PlanningPromptPath}" VerticalAlignment="Center"/>
                    <Button Grid.Row="1" Grid.Column="2" Content="Open in editor"
                            Command="{Binding Files.OpenPromptCommand}" CommandParameter="Planning"/>
                    <TextBlock Grid.Row="2" Grid.Column="0" Classes="field-label" Text="Agent" VerticalAlignment="Center"/>
                    <TextBlock Grid.Row="2" Grid.Column="1" Classes="path-mono" Text="{Binding Files.AgentPromptPath}" VerticalAlignment="Center"/>
                    <Button Grid.Row="2" Grid.Column="2" Content="Open in editor"
                            Command="{Binding Files.OpenPromptCommand}" CommandParameter="Agent"/>
                  </Grid>
                </StackPanel>
                <TextBlock Text="{Binding Files.StatusMessage}"
                           Foreground="{DynamicResource TextDimBrush}" FontSize="11"
                           IsVisible="{Binding Files.StatusMessage, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"/>
              </StackPanel>
            </ScrollViewer>
          </TabItem>

          <TabItem Header="Prime Claude">
            <ScrollViewer>
              <StackPanel Spacing="12" Margin="0,8,0,0">
                <TextBlock TextWrapping="Wrap" FontSize="11"
                           Foreground="{DynamicResource TextDimBrush}"
                           Text="Prime your Claude usage window each morning by firing a single non-interactive ping at a chosen time. Only runs while ClaudeDo is open. If the app starts within 30 minutes of the target time, the ping fires immediately."/>
                <ItemsControl ItemsSource="{Binding Prime.Rows}">
                  <ItemsControl.ItemTemplate>
                    <DataTemplate x:DataType="settings:PrimeScheduleRowViewModel">
                      <Border BorderBrush="{DynamicResource LineBrush}" BorderThickness="1"
                              CornerRadius="6" Padding="10,8" Margin="0,0,0,8"
                              Background="{DynamicResource DeepBrush}">
                        <Grid ColumnDefinitions="Auto,*,Auto,Auto,Auto,Auto" ColumnSpacing="8">
                          <CheckBox Grid.Column="0" IsChecked="{Binding Enabled, Mode=TwoWay}" VerticalAlignment="Center"/>
                          <ctl:ThemedDatePicker Grid.Column="1"
                                                IsRange="True"
                                                StartDate="{Binding StartDate, Mode=TwoWay, Converter={StaticResource DateOnlyToDateTime}}"
                                                EndDate="{Binding EndDate, Mode=TwoWay, Converter={StaticResource DateOnlyToDateTime}}"
                                                Watermark="Pick a range"
                                                VerticalAlignment="Center"/>
                          <TextBox Grid.Column="2" Width="64"
                                   Text="{Binding TimeOfDay, Mode=TwoWay, Converter={StaticResource TimeSpanToHhmm}}"
                                   VerticalAlignment="Center"/>
                          <CheckBox Grid.Column="3" Content="Mon–Fri"
                                    IsChecked="{Binding WorkdaysOnly, Mode=TwoWay}" VerticalAlignment="Center"/>
                          <TextBlock Grid.Column="4" Text="{Binding LastRunLabel}" VerticalAlignment="Center"
                                     Foreground="{DynamicResource TextDimBrush}" FontSize="11"
                                     MinWidth="80"/>
                          <Button Grid.Column="5" Content="✕"
                                  Command="{Binding $parent[ItemsControl].((vm:SettingsModalViewModel)DataContext).Prime.RemoveScheduleCommand}"
                                  CommandParameter="{Binding}"/>
                        </Grid>
                      </Border>
                    </DataTemplate>
                  </ItemsControl.ItemTemplate>
                </ItemsControl>
                <Button Content="+ Add schedule" Command="{Binding Prime.AddScheduleCommand}" HorizontalAlignment="Left"/>
              </StackPanel>
            </ScrollViewer>
          </TabItem>

        </TabControl>
      </DockPanel>

      <!-- Footer -->
      <Border Grid.Row="2"
              Background="{DynamicResource DeepBrush}"
              BorderBrush="{DynamicResource LineBrush}"
              BorderThickness="0,1,0,0">
        <StackPanel Orientation="Horizontal" Spacing="8"
                    HorizontalAlignment="Right" VerticalAlignment="Center"
                    Margin="16,0">
          <Button Content="Cancel" Command="{Binding CancelCommand}" MinWidth="90"/>
          <Button Content="Save" Classes="primary"
                  Command="{Binding SaveCommand}"
                  IsEnabled="{Binding !IsBusy}" MinWidth="90"/>
        </StackPanel>
      </Border>

    </Grid>
  </Border>
</Window>
