<Window 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:m="using:SourceGit.Models"
        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.FileHistories"
        x:DataType="vm:FileHistories"
        x:Name="me"
        Icon="/App.ico"
        Title="{DynamicResource Text.FileHistory}"
        Background="Transparent"
        MinWidth="1280" MinHeight="720"
        ExtendClientAreaToDecorationsHint="True"
        ExtendClientAreaChromeHints="NoChrome"
        SystemDecorations="{OnPlatform Full, Linux=None}">
  <Grid Margin="{Binding #me.WindowState, Converter={x:Static c:WindowStateConverters.ToContentMargin}}">
    <Grid.RowDefinitions>
      <RowDefinition Height="30"/>
      <RowDefinition Height="*"/>
    </Grid.RowDefinitions>

    <!-- Custom window shadow for Linux -->
    <Border Grid.Row="0" Grid.RowSpan="2"
            Background="{DynamicResource Brush.Window}"
            Effect="drop-shadow(0 0 6 #A0000000)"
            IsVisible="{OnPlatform False, Linux=True}"/>

    <!-- TitleBar -->
    <Grid Grid.Row="0" ColumnDefinitions="Auto,Auto,Auto,*,Auto">
      <!-- Bottom border -->
      <Border Grid.Column="0" Grid.ColumnSpan="5"
              Background="{DynamicResource Brush.TitleBar}"
              BorderThickness="0,0,0,1" BorderBrush="{DynamicResource Brush.Border0}"
              DoubleTapped="MaximizeOrRestoreWindow"
              PointerPressed="BeginMoveWindow"/>

      <!-- Caption Buttons (macOS) -->
      <Border Grid.Column="0" IsVisible="{OnPlatform False, macOS=True}">
        <v:CaptionButtonsMacOS/>
      </Border>

      <!-- Icon -->
      <Path Grid.Column="1" Margin="8,0,0,0" Width="12" Height="12" Stretch="Uniform" Data="{StaticResource Icons.Histories}"/>

      <!-- Title -->
      <TextBlock Grid.Column="2" Margin="4,0,0,0" Text="{DynamicResource Text.FileHistory}" FontWeight="Bold" IsHitTestVisible="False" VerticalAlignment="Center"/>

      <!-- Target File -->
      <TextBlock Grid.Column="3" Margin="8,0,0,0" Text="{Binding File}" FontSize="11" FontStyle="Italic" IsHitTestVisible="False" VerticalAlignment="Center"/>

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

    <!-- Body -->
    <Grid Grid.Row="1" Background="{DynamicResource Brush.Window}">
      <Grid.ColumnDefinitions>
        <ColumnDefinition Width="300" MinWidth="300" MaxWidth="600"/>
        <ColumnDefinition Width="1"/>
        <ColumnDefinition Width="*"/>
      </Grid.ColumnDefinitions>

      <DataGrid Grid.Column="0"
                Background="Transparent"
                ItemsSource="{Binding Commits}"
                SelectedItem="{Binding SelectedCommit, Mode=TwoWay}"
                SelectionMode="Single"
                CanUserReorderColumns="False"
                CanUserResizeColumns="False"
                CanUserSortColumns="False"
                IsReadOnly="True"
                HeadersVisibility="None"
                Focusable="False"
                RowHeight="50"
                HorizontalScrollBarVisibility="Disabled"
                VerticalScrollBarVisibility="Auto">
        <DataGrid.Columns>
          <DataGridTemplateColumn Width="*">
            <DataGridTemplateColumn.CellTemplate>
              <DataTemplate DataType="m:Commit">
                <Border BorderBrush="{DynamicResource Brush.Border2}" BorderThickness="0,0,0,1" Padding="4">
                  <Grid RowDefinitions="Auto,*">
                    <Grid Grid.Row="0" ColumnDefinitions="Auto,*,Auto,Auto">
                      <v:Avatar Grid.Column="0" Width="16" Height="16" VerticalAlignment="Center" IsHitTestVisible="False" User="{Binding Author}"/>
                      <TextBlock Grid.Column="1" Classes="monospace" FontSize="12" Text="{Binding Author.Name}" Margin="8,0,0,0"/>
                      <TextBlock Grid.Column="2" Classes="monospace" FontSize="12" Text="{Binding SHA, Converter={x:Static c:StringConverters.ToShortSHA}}" Foreground="DarkOrange" Margin="8,0,0,0" TextDecorations="Underline" Cursor="Hand" PointerPressed="OnPressedSHA"/>
                      <TextBlock Grid.Column="3" Classes="monospace" FontSize="12" Text="{Binding AuthorTimeShortStr}" Foreground="{DynamicResource Brush.FG2}" Margin="8,0,0,0"/>
                    </Grid>

                    <TextBlock Grid.Row="1" Classes="monospace" Text="{Binding Subject}" FontSize="12" VerticalAlignment="Bottom"/>
                  </Grid>
                </Border>
              </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
          </DataGridTemplateColumn>
        </DataGrid.Columns>
      </DataGrid>

      <GridSplitter Grid.Column="1"
                    Width="1" MinWidth=".5"
                    HorizontalAlignment="Center" VerticalAlignment="Stretch"
                    Background="{DynamicResource Brush.Border0}"/>

      <Grid Grid.Column="2">
        <ContentControl Margin="4" Content="{Binding DiffContext}">
          <ContentControl.DataTemplates>
            <DataTemplate DataType="vm:DiffContext">
              <v:DiffView/>
            </DataTemplate>
          </ContentControl.DataTemplates>
        </ContentControl>
      </Grid>
    </Grid>

    <!-- Custom window sizer for Linux -->
    <Grid Grid.Row="0" Grid.RowSpan="2" IsVisible="{OnPlatform False, Linux=True}">
      <Border Width="4" Height="4"
              Background="Transparent"
              HorizontalAlignment="Left" VerticalAlignment="Top"
              Cursor="TopLeftCorner"
              Tag="{x:Static WindowEdge.NorthWest}"
              PointerPressed="CustomResizeWindow"/>

      <Border Height="4" Margin="4,0"
              Background="Transparent"
              HorizontalAlignment="Stretch" VerticalAlignment="Top"
              Cursor="TopSide"
              Tag="{x:Static WindowEdge.North}"
              PointerPressed="CustomResizeWindow"/>

      <Border Width="4" Height="4"
              Background="Transparent"
              HorizontalAlignment="Right" VerticalAlignment="Top"
              Cursor="TopRightCorner"
              Tag="{x:Static WindowEdge.NorthEast}"
              PointerPressed="CustomResizeWindow"/>

      <Border Width="4" Margin="0,4"
              Background="Transparent"
              HorizontalAlignment="Left" VerticalAlignment="Stretch"
              Cursor="LeftSide"
              Tag="{x:Static WindowEdge.West}"
              PointerPressed="CustomResizeWindow"/>

      <Border Width="4" Margin="0,4"
              Background="Transparent"
              HorizontalAlignment="Right" VerticalAlignment="Stretch"
              Cursor="RightSide"
              Tag="{x:Static WindowEdge.East}"
              PointerPressed="CustomResizeWindow"/>

      <Border Width="4" Height="4"
              Background="Transparent"
              HorizontalAlignment="Left" VerticalAlignment="Bottom"
              Cursor="BottomLeftCorner"
              Tag="{x:Static WindowEdge.SouthWest}"
              PointerPressed="CustomResizeWindow"/>

      <Border Height="4" Margin="4,0"
              Background="Transparent"
              HorizontalAlignment="Stretch" VerticalAlignment="Bottom"
              Cursor="BottomSide"
              Tag="{x:Static WindowEdge.South}"
              PointerPressed="CustomResizeWindow"/>

      <Border Width="4" Height="4"
              Background="Transparent"
              HorizontalAlignment="Right" VerticalAlignment="Bottom"
              Cursor="BottomRightCorner"
              Tag="{x:Static WindowEdge.SouthEast}"
              PointerPressed="CustomResizeWindow"/>
    </Grid>
  </Grid>
</Window>
