<rxui:ReactiveUserControl
    x:Class="Wabbajack.InstallationView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:common="clr-namespace:Wabbajack.Common;assembly=Wabbajack.Common"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:icon="http://metro.mahapps.com/winfx/xaml/iconpacks"
    xmlns:lib="clr-namespace:Wabbajack.Lib;assembly=Wabbajack.Lib"
    xmlns:local="clr-namespace:Wabbajack"
    xmlns:mahapps="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:rxui="http://reactiveui.net"
    d:DataContext="{d:DesignInstance local:InstallerVM}"
    d:DesignHeight="500"
    d:DesignWidth="800"
    x:TypeArguments="local:InstallerVM"
    mc:Ignorable="d">
    <UserControl.Resources>
        <Style
            x:Key="SlideshowButton"
            BasedOn="{StaticResource CircleButtonStyle}"
            TargetType="ButtonBase">
            <Setter Property="Width" Value="40" />
            <Setter Property="Height" Value="40" />
            <Setter Property="Margin" Value="4" />
        </Style>
    </UserControl.Resources>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="47" />
            <RowDefinition Height="4*" />
            <RowDefinition Height="*" MinHeight="175" />
        </Grid.RowDefinitions>
        <Rectangle Grid.Row="1" Grid.RowSpan="2"
            x:Name="BorderEdgeFadeDown">
            <Rectangle.Fill>
                <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                    <GradientStop Offset="0" Color="#191919" />
                    <GradientStop Offset="0.4" Color="#00191919" />
                </LinearGradientBrush>
            </Rectangle.Fill>
        </Rectangle>
        <local:HeatedBackgroundView Grid.Row="0" Grid.RowSpan="3"
            x:Name="HeatedBackground" />
        <Grid Grid.Row="1"
            x:Name="Slideshow"
            Margin="5,0,5,5">
            <Border BorderBrush="{StaticResource BorderInterestBrush}" BorderThickness="1,0,1,1">
                <Grid>
                    <local:DetailImageView x:Name="DetailImage" />
                    <mahapps:ProgressRing x:Name="ModlistLoadingRing" />
                </Grid>
            </Border>
            <Grid
                Margin="0,20,25,0"
                HorizontalAlignment="Right"
                VerticalAlignment="Top">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition Width="Auto" />
                </Grid.ColumnDefinitions>
                <Grid.Effect>
                    <DropShadowEffect
                        BlurRadius="25"
                        Opacity="1"
                        Color="Black" />
                </Grid.Effect>
                <Grid.Style>
                    <Style TargetType="Grid">
                        <Setter Property="Opacity" Value="0" />
                        <Style.Triggers>
                            <MultiDataTrigger>
                                <MultiDataTrigger.Conditions>
                                    <Condition Binding="{Binding IsMouseOver, ElementName=Slideshow}" Value="True" />
                                    <Condition Binding="{Binding Installing}" Value="True" />
                                </MultiDataTrigger.Conditions>
                                <MultiDataTrigger.EnterActions>
                                    <BeginStoryboard>
                                        <Storyboard>
                                            <DoubleAnimation
                                                Storyboard.TargetProperty="Opacity"
                                                To="1"
                                                Duration="0:0:0.12" />
                                        </Storyboard>
                                    </BeginStoryboard>
                                </MultiDataTrigger.EnterActions>
                                <MultiDataTrigger.ExitActions>
                                    <BeginStoryboard>
                                        <Storyboard>
                                            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="Opacity">
                                                <LinearDoubleKeyFrame KeyTime="0:0:0.3" Value="1" />
                                                <LinearDoubleKeyFrame KeyTime="0:0:0.42" Value="0" />
                                            </DoubleAnimationUsingKeyFrames>
                                        </Storyboard>
                                    </BeginStoryboard>
                                </MultiDataTrigger.ExitActions>
                            </MultiDataTrigger>
                        </Style.Triggers>
                    </Style>
                </Grid.Style>
                <Button Grid.Column="3"
                    x:Name="SkipSlideButton"
                    Width="60"
                    Height="60"
                    Margin="6"
                    Background="{StaticResource BackgroundBrush}"
                    Style="{StaticResource CircleButtonStyle}"
                    ToolTip="Skip to the next mod">
                    <icon:PackIconFontAwesome
                        Width="28"
                        Height="28"
                        Kind="ChevronRightSolid" />
                </Button>
                <ToggleButton Grid.Column="2"
                    x:Name="PlayPauseButton"
                    Margin="6"
                    Background="{StaticResource BackgroundBrush}"
                    Style="{StaticResource SlideshowButton}">
                    <icon:PackIconMaterial>
                        <icon:PackIconMaterial.Style>
                            <Style TargetType="icon:PackIconMaterial">
                                <Setter Property="Kind" Value="Play" />
                                <Style.Triggers>
                                    <DataTrigger Binding="{Binding Slideshow.Enable}" Value="True">
                                        <Setter Property="Kind" Value="Pause" />
                                    </DataTrigger>
                                </Style.Triggers>
                            </Style>
                        </icon:PackIconMaterial.Style>
                    </icon:PackIconMaterial>
                </ToggleButton>
                <Button Grid.Column="1"
                    x:Name="OpenWebsite"
                    Margin="6"
                    Background="{StaticResource BackgroundBrush}"
                    Style="{StaticResource SlideshowButton}"
                    ToolTip="Open mod's website">
                    <icon:PackIconMaterial
                        Width="28"
                        Height="28"
                        Kind="Web" />
                </Button>
                <ToggleButton Grid.Column="0"
                    x:Name="ShowNSFWButton"
                    Background="{StaticResource BackgroundBrush}"
                    Style="{StaticResource SlideshowButton}">
                    <Grid>
                        <TextBlock
                            Margin="4"
                            HorizontalAlignment="Center"
                            VerticalAlignment="Center"
                            FontFamily="Lucida Sans"
                            FontSize="9"
                            FontWeight="Bold"
                            Text="NSFW" />
                        <icon:PackIconOcticons
                            x:Name="NSFWSlashIcon"
                            Width="40"
                            Height="40"
                            HorizontalAlignment="Center"
                            VerticalAlignment="Center"
                            Foreground="#88FFFFFF"
                            Kind="CircleSlash" />
                    </Grid>
                </ToggleButton>
            </Grid>
        </Grid>
        <!--  Comes after slideshow control, so that any effects/overlap goes on top  -->
        <local:TopProgressView Grid.Row="0" Grid.RowSpan="2"
            x:Name="TopProgressBar">
            <!--  Readd when Pause/Stop implementations added  -->
            <!--<Button Grid.Column="2"
                    ToolTip="Pause Installation"
                    Margin="0,0,0,5"
                    Width="50"
                    Visibility="{Binding StartedInstallation, Converter={StaticResource bool2VisibilityConverter}}">
                <icon:PackIconMaterial
                    Kind="Pause" />
            </Button>
            <Button Grid.Column="3"
                    ToolTip="Stop Installation"
                    Margin="0,0,0,5"
                    Width="50"
                    Visibility="{Binding StartedInstallation, Converter={StaticResource bool2VisibilityConverter}}" >
                <icon:PackIconFontAwesome
                    Width="25"
                    Height="25"
                    Kind="TimesCircleSolid" />
            </Button>-->
        </local:TopProgressView>
        <Button Grid.Row="0" Grid.RowSpan="2"
            x:Name="BackButton"
            Width="30"
            Height="30"
            Margin="7,5,0,0"
            HorizontalAlignment="Left"
            VerticalAlignment="Top"
            Style="{StaticResource IconCircleButtonStyle}"
            ToolTip="Back to main menu">
            <icon:PackIconMaterial Foreground="{Binding Foreground, RelativeSource={RelativeSource AncestorType={x:Type Button}}}" Kind="ArrowLeft" />
        </Button>
        <!--  Bottom Area  -->
        <Grid Grid.Row="2"
            x:Name="BottomButtonInputGrid"
            Margin="5,0,5,5"
            ClipToBounds="True">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="4" />
                <ColumnDefinition Width="2*" />
            </Grid.ColumnDefinitions>
            <Grid Grid.Column="0" Margin="0">
                <Grid.RowDefinitions>
                    <RowDefinition Height="*" />
                    <RowDefinition Height="*" />
                    <RowDefinition Height="*" />
                    <RowDefinition Height="*" />
                </Grid.RowDefinitions>
                <Button Grid.Row="0"
                    x:Name="OpenReadmePreInstallButton"
                    Margin="30,5"
                    FontSize="20"
                    Style="{StaticResource LargeButtonStyle}"
                    ToolTip="Open the readme for the modlist">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="30" />
                            <ColumnDefinition Width="82" />
                        </Grid.ColumnDefinitions>
                        <icon:PackIconFontAwesome Grid.Column="0"
                            Width="30"
                            Height="30"
                            VerticalAlignment="Center"
                            Kind="ReadmeBrands" />
                        <TextBlock Grid.Column="1"
                            Margin="10,0,0,0"
                            VerticalAlignment="Center"
                            Text="Readme" />
                    </Grid>
                </Button>
                <Button Grid.Row="1"
                    x:Name="VisitWebsitePreInstallButton"
                    Margin="30,5"
                    FontSize="20"
                    Style="{StaticResource LargeButtonStyle}"
                    ToolTip="Open the webpage for the modlist">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="30" />
                            <ColumnDefinition Width="82" />
                        </Grid.ColumnDefinitions>
                        <icon:PackIconMaterial Grid.Column="0"
                            Width="30"
                            Height="30"
                            VerticalAlignment="Center"
                            Kind="Web" />
                        <TextBlock Grid.Column="1"
                            Margin="10,0,0,0"
                            VerticalAlignment="Center"
                            Text="Website" />
                    </Grid>
                </Button>
                <Button Grid.Row="2"
                    x:Name="ShowManifestPreInstallButton"
                    Margin="30,5"
                    FontSize="20"
                    Style="{StaticResource LargeButtonStyle}"
                    ToolTip="Open an explicit listing of all actions this modlist will take">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="30" />
                            <ColumnDefinition Width="82" />
                        </Grid.ColumnDefinitions>
                        <icon:PackIconOcticons Grid.Column="0"
                            Width="30"
                            Height="30"
                            VerticalAlignment="Center"
                            Kind="Checklist" />
                        <TextBlock Grid.Column="1"
                            Margin="10,0,0,0"
                            VerticalAlignment="Center"
                            Text="Manifest" />
                    </Grid>
                </Button>
                <Button Grid.Row="4"
                        x:Name="OpenDiscordButton"
                        Margin="30,5"
                        FontSize="20"
                        Style="{StaticResource LargeButtonStyle}"
                        ToolTip="Open a link to the official discord for this modlist">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="30" />
                            <ColumnDefinition Width="82" />
                        </Grid.ColumnDefinitions>
                        <icon:PackIconMaterial Grid.Column="0"
                                               Width="30"
                                               Height="30"
                                               VerticalAlignment="Center"
                                               Kind="Discord" />
                        <TextBlock Grid.Column="1"
                                   Margin="10,0,0,0"
                                   VerticalAlignment="Center"
                                   Text="Discord" />
                    </Grid>
                </Button>
            </Grid>
            <local:InstallationConfigurationView Grid.Column="2"
                x:Name="InstallationConfigurationView"
                ViewModel="{Binding}" />
        </Grid>
        <Grid Grid.Row="2"
            x:Name="MidInstallDisplayGrid"
            Margin="5,0,5,5">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="4*" />
                <ColumnDefinition Width="5" />
                <ColumnDefinition Width="3*" />
            </Grid.ColumnDefinitions>
            <local:LogView x:Name="LogView" Grid.Column="0" />
            <local:CpuView Grid.Column="2"
                x:Name="CpuView"
                ViewModel="{Binding}" />
            <local:AttentionBorder Grid.Column="2"
                x:Name="UserInterventionsControl"
                Content="{Binding ActiveGlobalUserIntervention}">
                <local:AttentionBorder.Resources>
                    <DataTemplate DataType="{x:Type lib:ConfirmationIntervention}">
                        <local:ConfirmationInterventionView ViewModel="{Binding}" />
                    </DataTemplate>
                    <DataTemplate DataType="{x:Type local:ConfirmUpdateOfExistingInstallVM}">
                        <local:ConfirmUpdateOfExistingInstallView ViewModel="{Binding}" />
                    </DataTemplate>
                </local:AttentionBorder.Resources>
            </local:AttentionBorder>
            <local:InstallationCompleteView Grid.Column="2"
                x:Name="InstallComplete"
                ViewModel="{Binding}" />
        </Grid>
    </Grid>
</rxui:ReactiveUserControl>