<v:ChromelessWindow xmlns="https://github.com/avaloniaui"
                    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:vm="using:SourceGit.ViewModels"
                    xmlns:v="using:SourceGit.Views"
                    xmlns:c="using:SourceGit.Converters"
                    mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
                    x:Class="SourceGit.Views.BranchCompare"
                    x:DataType="vm:BranchCompare"
                    x:Name="ThisControl"
                    Icon="/App.ico"
                    Title="{DynamicResource Text.BranchCompare}"
                    MinWidth="1280" MinHeight="720">
  <Grid RowDefinitions="Auto,64,*">
    <!-- TitleBar -->
    <Grid Grid.Row="0" Height="28" IsVisible="{Binding !#ThisControl.UseSystemWindowFrame}">
      <!-- Bottom border -->
      <Border Background="{DynamicResource Brush.TitleBar}"
              BorderThickness="0,0,0,1" BorderBrush="{DynamicResource Brush.Border2}"
              DoubleTapped="MaximizeOrRestoreWindow"
              PointerPressed="BeginMoveWindow"/>

      <Path Width="12" Height="12"
            Margin="10,0,0,0"
            HorizontalAlignment="Left"
            Data="{StaticResource Icons.Compare}"
            IsVisible="{OnPlatform True, macOS=False}"/>

      <TextBlock Classes="bold"
                 Text="{DynamicResource Text.BranchCompare}"
                 HorizontalAlignment="Center" VerticalAlignment="Center"
                 IsHitTestVisible="False"/>

      <!-- Caption Buttons (Windows/Linux) -->
      <v:CaptionButtons HorizontalAlignment="Right" IsVisible="{OnPlatform True, macOS=False}"/>
    </Grid>

    <!-- Compare Targets -->
    <Border Grid.Row="1">
      <Grid Margin="8" ColumnDefinitions="*,48,*">
        <Border Grid.Column="0" BorderBrush="{DynamicResource Brush.Diff.DeletedHighlight}" BorderThickness="1" Background="{DynamicResource Brush.Contents}" CornerRadius="4" Padding="4">
          <Grid RowDefinitions="Auto,*">
            <Grid Grid.Row="0" ColumnDefinitions="Auto,*,Auto,Auto,Auto">
              <v:Avatar Width="16" Height="16"
                        VerticalAlignment="Center"
                        IsHitTestVisible="False"
                        User="{Binding BaseHead.Author}"/>
              <TextBlock Grid.Column="1" Text="{Binding BaseHead.Author.Name}" Margin="8,0,0,0"/>
              <Border Grid.Column="2" Background="{DynamicResource Brush.Accent}" CornerRadius="4">
                <TextBlock Text="{Binding Base.FriendlyName}" Margin="4,0" Foreground="#FFDDDDDD"/>
              </Border>
              <TextBlock Grid.Column="3" Text="{Binding BaseHead.SHA, Converter={x:Static c:StringConverters.ToShortSHA}}" Foreground="DarkOrange" Margin="8,0,0,0" TextDecorations="Underline" Cursor="Hand" PointerPressed="OnPressedSHA"/>
              <TextBlock Grid.Column="4" Text="{Binding BaseHead.CommitterTimeStr}" Foreground="{DynamicResource Brush.FG2}" Margin="8,0,0,0"/>
            </Grid>

            <TextBlock Grid.Row="1" Text="{Binding BaseHead.Subject}" VerticalAlignment="Bottom"/>
          </Grid>
        </Border>

        <!-- Swap Button -->
        <Button Grid.Column="1" Classes="icon_button" Command="{Binding Swap}" HorizontalAlignment="Center" ToolTip.Tip="{DynamicResource Text.Diff.SwapCommits}">
          <Path Width="16" Height="16" Data="{DynamicResource Icons.Compare}"/>
        </Button>

        <Border Grid.Column="2" BorderBrush="{DynamicResource Brush.Diff.AddedHighlight}" BorderThickness="1" Background="{DynamicResource Brush.Contents}" CornerRadius="4" Padding="4">
          <Grid RowDefinitions="Auto,*">
            <Grid Grid.Row="0" ColumnDefinitions="Auto,*,Auto,Auto,Auto">
              <v:Avatar Width="16" Height="16"
                        VerticalAlignment="Center"
                        IsHitTestVisible="False"
                        User="{Binding ToHead.Author}"/>
              <TextBlock Grid.Column="1" Text="{Binding ToHead.Author.Name}" Margin="8,0,0,0"/>
              <Border Grid.Column="2" Background="{DynamicResource Brush.Accent}" CornerRadius="4">
                <TextBlock Text="{Binding To.FriendlyName}" Margin="4,0" Foreground="#FFDDDDDD"/>
              </Border>
              <TextBlock Grid.Column="3" Text="{Binding ToHead.SHA, Converter={x:Static c:StringConverters.ToShortSHA}}" Foreground="DarkOrange" Margin="8,0,0,0" TextDecorations="Underline" Cursor="Hand" PointerPressed="OnPressedSHA"/>
              <TextBlock Grid.Column="4" Text="{Binding ToHead.CommitterTimeStr}" Foreground="{DynamicResource Brush.FG2}" Margin="8,0,0,0"/>
            </Grid>

            <TextBlock Grid.Row="1" Text="{Binding ToHead.Subject}" VerticalAlignment="Bottom"/>
          </Grid>
        </Border>
      </Grid>
    </Border>

    <!-- Changes -->
    <Border Grid.Row="2">
      <Grid Margin="8,0,8,8">
        <Grid.ColumnDefinitions>
          <ColumnDefinition Width="256" MinWidth="200" MaxWidth="480"/>
          <ColumnDefinition Width="4"/>
          <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>

        <Grid Grid.Column="0" RowDefinitions="26,*,26">
          <!-- Search & Display Mode -->
          <Grid Grid.Row="0" ColumnDefinitions="*,18">
            <TextBox Grid.Column="0"
                     Height="26"
                     BorderThickness="1" BorderBrush="{DynamicResource Brush.Border2}"
                     Background="Transparent"
                     CornerRadius="4"
                     Watermark="{DynamicResource Text.CommitDetail.Changes.Search}"
                     Text="{Binding SearchFilter, Mode=TwoWay}">
              <TextBox.InnerLeftContent>
                <Path Width="14" Height="14" Margin="4,0,0,0" Fill="{DynamicResource Brush.FG2}" Data="{StaticResource Icons.Search}"/>
              </TextBox.InnerLeftContent>

              <TextBox.InnerRightContent>
                <Button Classes="icon_button"
                        IsVisible="{Binding SearchFilter, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"
                        Command="{Binding ClearSearchFilter}">
                  <Path Width="14" Height="14" Fill="{DynamicResource Brush.FG2}" Data="{StaticResource Icons.Clear}"/>
                </Button>
              </TextBox.InnerRightContent>
            </TextBox>

            <v:ChangeViewModeSwitcher Grid.Column="1"
                                      Width="14" Height="14"
                                      HorizontalAlignment="Right"
                                      ViewMode="{Binding Source={x:Static vm:Preferences.Instance}, Path=CommitChangeViewMode, Mode=TwoWay}"/>
          </Grid>

          <!-- Changes -->
          <Border Grid.Row="1" Margin="0,4,0,0" BorderBrush="{DynamicResource Brush.Border2}" BorderThickness="1" Background="{DynamicResource Brush.Contents}">
            <v:ChangeCollectionView ViewMode="{Binding Source={x:Static vm:Preferences.Instance}, Path=CommitChangeViewMode}"
                                    EnableCompactFolders="{Binding Source={x:Static vm:Preferences.Instance}, Path=EnableCompactFoldersInChangesTree}"
                                    Changes="{Binding VisibleChanges}"
                                    SelectedChanges="{Binding SelectedChanges, Mode=TwoWay}"
                                    ContextRequested="OnChangeContextRequested"
                                    KeyDown="OnChangeCollectionViewKeyDown"/>
          </Border>

          <!-- Loading Status Icon -->
          <v:LoadingIcon Grid.Row="1"
                         Width="48" Height="48"
                         HorizontalAlignment="Center" VerticalAlignment="Center"
                         IsVisible="{Binding IsLoading}"/>

          <!-- Summary -->
          <Border Grid.Row="2" BorderBrush="{DynamicResource Brush.Border2}" BorderThickness="1,0,1,1" Background="Transparent">
            <TextBlock Margin="4,0,0,0"
                       Foreground="{DynamicResource Brush.FG2}"
                       HorizontalAlignment="Left" VerticalAlignment="Center">
              <Run Text="{Binding TotalChanges, Mode=OneWay}" FontWeight="Bold"/>
              <Run Text="{DynamicResource Text.CommitDetail.Changes.Count}"/>
            </TextBlock>
          </Border>
        </Grid>

        <GridSplitter Grid.Column="1"
                      MinWidth="1"
                      HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
                      Background="Transparent"/>

        <Grid Grid.Column="2">
          <Border BorderThickness="1" BorderBrush="{DynamicResource Brush.Border2}">
            <StackPanel Orientation="Vertical" VerticalAlignment="Center">
              <Path Width="64" Height="64" Data="{StaticResource Icons.Diff}" Fill="{DynamicResource Brush.FG2}"/>
              <TextBlock Margin="0,16,0,0"
                         Text="{DynamicResource Text.Diff.Welcome}"
                         FontSize="18" FontWeight="Bold"
                         Foreground="{DynamicResource Brush.FG2}"
                         HorizontalAlignment="Center"/>
            </StackPanel>
          </Border>

          <ContentControl Content="{Binding DiffContext}">
            <ContentControl.DataTemplates>
              <DataTemplate DataType="vm:DiffContext">
                <v:DiffView/>
              </DataTemplate>
            </ContentControl.DataTemplates>
          </ContentControl>
        </Grid>
      </Grid>
    </Border>
  </Grid>
</v:ChromelessWindow>
