<Window xmlns:ctreditor="clr-namespace:CtrEditor" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:i="http://schemas.microsoft.com/xaml/behaviors" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:Siemens="clr-namespace:LibS7Adv;assembly=LibS7Adv" xmlns:local="clr-namespace:CtrEditor"
        xmlns:uc="clr-namespace:CtrEditor.ObjetosSim.UserControls"
        xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit" xmlns:sys="clr-namespace:System;assembly=mscorlib"
        xmlns:ObjetosSim="clr-namespace:CtrEditor.ObjetosSim"
        xmlns:ObjetosExtraccion="clr-namespace:CtrEditor.ObjetosSim.Extraccion_Datos" x:Class="CtrEditor.MainWindow"
        Height="900" Width="1600" WindowState="Maximized" ResizeMode="CanResize" Title="{Binding directorioTrabajo, Converter={StaticResource UnsavedChangesConverter}}"
        Icon="/app2.png">

    <Window.DataContext>
        <ctreditor:MainViewModel />
    </Window.DataContext>

    <Window.Resources>

        <!-- Style for Start/Stop Button -->
        <Style x:Key="StartStopButtonStyle" TargetType="Button">
            <Setter Property="Background" Value="Transparent" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsSimulationRunning}" Value="True">
                    <Setter Property="Background" Value="LightGreen" />
                </DataTrigger>
            </Style.Triggers>
        </Style>

        <!-- Style for Connect/Disconnect Button -->
        <Style x:Key="ConnectDisconnectButtonStyle" TargetType="Button">
            <Setter Property="Background" Value="Transparent" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsConnected}" Value="True">
                    <Setter Property="Background" Value="LightGreen" />
                </DataTrigger>
            </Style.Triggers>
        </Style>

    </Window.Resources>

    <Grid>
        <!-- Menú Principal sobre toda la ventana -->
        <Menu VerticalAlignment="Top" HorizontalAlignment="Stretch">
            <MenuItem Header="Projecto">
                <MenuItem Header="Abrir Directorio de trabajo" Command="{Binding OpenWorkDirectoryCommand}" />
                <MenuItem Header="Ultimos Directorios Utilizados" ItemsSource="{Binding RecentDirectories}">
                    <MenuItem.ItemTemplate>
                        <DataTemplate>
                            <MenuItem Header="{Binding}" Command="{Binding DataContext.OpenRecentDirectoryCommand, RelativeSource={RelativeSource AncestorType=MenuItem, AncestorLevel=2}}" 
                                      CommandParameter="{Binding}"/>
                        </DataTemplate>
                    </MenuItem.ItemTemplate>
                </MenuItem>
                <MenuItem Header="Iniciar Simulacion" Command="{Binding StartSimulationCommand}" />
                <MenuItem Header="Detenet Simulacion" Command="{Binding StopSimulationCommand}" />
                <MenuItem Header="Debug Window" Command="{Binding DebugWindowCommand}" />
                <MenuItem Header="Guardar" Command="{Binding SaveCommand}" />
                <MenuItem Header="Salir" Command="{Binding ExitCommand}" />
            </MenuItem>
        </Menu>

        <Grid Margin="0,20,0,0">
            <!-- Margen superior para el menú -->
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="1*" MinWidth="200" />
                <ColumnDefinition Width="8*" MinWidth="200" />
                <ColumnDefinition Width="2*" MinWidth="100" />
            </Grid.ColumnDefinitions>

            <!-- Primera Columna -->
            <Grid Grid.Column="0">
                <Grid.RowDefinitions>
                    <RowDefinition Height="1*" />
                    <RowDefinition Height="2*" />
                    <RowDefinition Height="Auto" />
                </Grid.RowDefinitions>
                <ListBox x:Name="ListaImagenes" Grid.Row="0" Margin="5" ItemsSource="{Binding ListaImagenes}"
                        SelectedItem="{Binding SelectedImage}" />
                <ListBox x:Name="ListaFunciones" Grid.Row="1" Margin="5" ItemsSource="{Binding ListaOsBase}"
                        DisplayMemberPath="Nombre" SelectedItem="{Binding SelectedItem}">
                    <i:Interaction.Triggers>
                        <i:EventTrigger EventName="MouseDoubleClick">
                            <i:InvokeCommandAction Command="{Binding ItemDoubleClickCommand}"
                                    CommandParameter="{Binding SelectedItem}" />
                        </i:EventTrigger>
                    </i:Interaction.Triggers>
                </ListBox>
                <Siemens:PLCControl x:Name="PLCSim" Grid.Row="2" Margin="5" DataContext="{Binding PLCViewModel}" />
            </Grid>
            <!-- GridSplitter -->
            <GridSplitter Grid.Column="0" Grid.Row="0" HorizontalAlignment="Right" Width="5" Background="LightGray" />

            <!-- Segunda Columna -->
            <Grid Grid.Column="1">
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto" />
                    <RowDefinition Height="*" />
                </Grid.RowDefinitions>

                <ToolBarTray Grid.Row="0">
                    <ToolBar>
                        <Button Command="{Binding TBStartSimulationCommand}" ToolTip="Iniciar Simulación"
                                Style="{StaticResource StartStopButtonStyle}">
                            <StackPanel>
                                <Image Source="Icons/start.png" Width="24" Height="24" />
                                <TextBlock Text="Iniciar" />
                            </StackPanel>
                        </Button>
                        <Button Command="{Binding TBStopSimulationCommand}" ToolTip="Detener Simulación">
                            <StackPanel>
                                <Image Source="Icons/stop.png" Width="24" Height="24" />
                                <TextBlock Text="Detener" />
                            </StackPanel>
                        </Button>
                        <Button Command="{Binding TBSaveCommand}" ToolTip="Guardar">
                            <StackPanel>
                                <Image Source="Icons/save.png" Width="24" Height="24" />
                                <TextBlock Text="Guardar" />
                            </StackPanel>
                        </Button>
                        <Button Command="{Binding TBConnectPLCCommand}" ToolTip="Conectar PLC"
                                Style="{StaticResource ConnectDisconnectButtonStyle}">
                            <StackPanel>
                                <Image Source="Icons/connect.png" Width="24" Height="24" />
                                <TextBlock Text="Conectar" />
                            </StackPanel>
                        </Button>
                        <Button Command="{Binding TBDisconnectPLCCommand}" ToolTip="Desconectar PLC">
                            <StackPanel>
                                <Image Source="Icons/disconnect.png" Width="24" Height="24" />
                                <TextBlock Text="Desconectar" />
                            </StackPanel>
                        </Button>
                        <Button Command="{Binding TBExtractTagsCommand}" ToolTip="Extraer Tags">
                            <StackPanel>
                                <Image Source="Icons/extract.png" Width="24" Height="24" />
                                <TextBlock Text="Extraer Tags" />
                            </StackPanel>
                        </Button>
                        <Button Command="{Binding TBMultiPageExtractTagsCommand}" ToolTip="Extraer Tags in multiple pages.">
                            <StackPanel>
                                <Image Source="Icons/extract.png" Width="24" Height="24" />
                                <TextBlock Text="Multi Page Extract" />
                            </StackPanel>
                        </Button>
                        <Button Command="{Binding TBMultiPageAnalizeCommand}"
                                ToolTip="Analyze Tags in multiple pages.">
                            <StackPanel>
                                <Image Source="Icons/analyze.png" Width="24" Height="24" />
                                <TextBlock Text="Multi Page Analyze" />
                            </StackPanel>
                        </Button>
                        <Button Command="{Binding TBAnalyzeMatrixCommand}" ToolTip="Analyze Export Matrix">
                            <StackPanel>
                                <Image Source="Icons/analyze.png" Width="24" Height="24" />
                                <TextBlock Text="Analyze Matrix" />
                            </StackPanel>
                        </Button>

                    </ToolBar>
                </ToolBarTray>

                <ScrollViewer Grid.Row="1" x:Name="ImagenEnTrabajoScrollViewer" HorizontalScrollBarVisibility="Auto"
                        VerticalScrollBarVisibility="Auto" PanningMode="Both">
                    <Canvas x:Name="ImagenEnTrabajoCanvas" Margin="0">
                        <!-- El Margin puede ser ajustado según el espacio adicional que quieras proporcionar -->
                        <Canvas.RenderTransform>
                            <TransformGroup>
                                <ScaleTransform x:Name="CanvasScaleTransform" ScaleX="1" ScaleY="1" />
                                <TranslateTransform x:Name="CanvasTranslateTransform" />
                            </TransformGroup>
                        </Canvas.RenderTransform>
                    </Canvas>
                </ScrollViewer>
            </Grid>

            <!-- GridSplitter -->
            <GridSplitter Grid.Column="1" Grid.Row="0" HorizontalAlignment="Right" Width="5" Background="LightGray" />

            <!-- Tercera Columna -->
            <Grid Grid.Column="2">
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto" />
                    <RowDefinition Height="Auto" MinHeight="50" />
                    <RowDefinition Height="*" MinHeight="100" />
                    <!-- ListBox1 -->
                    <RowDefinition Height="Auto" />
                    <!-- GridSplitter -->
                    <RowDefinition Height="*" MinHeight="200" />
                    <!-- StackPanel -->
                    <RowDefinition Height="Auto" />
                    <!-- ToolBarTray -->
                </Grid.RowDefinitions>

                <ToolBarTray Grid.Row="0">
                    <ToolBar>
                        <Button Command="{Binding TBEliminarTodosCommand}" ToolTip="Eliminar Todos">
                            <StackPanel>
                                <Image Source="Icons/borrar.png" Width="16" Height="16" />
                                <TextBlock Text="All Objects" />
                            </StackPanel>
                        </Button>
                        <Button Command="{Binding TBEliminarAutoCreatedCommand}" ToolTip="Eliminar Auto">
                            <StackPanel>
                                <Image Source="Icons/borrar.png" Width="16" Height="16" />
                                <TextBlock Text="Auto Created" />
                            </StackPanel>
                        </Button>
                        <Button Command="{Binding TBEliminarClonedCommand}" ToolTip="Eliminar Cloned for tag Extraction">
                            <StackPanel>
                                <Image Source="Icons/borrar.png" Width="16" Height="16" />
                                <TextBlock Text="Cloned" />
                            </StackPanel>
                        </Button>
                        <Button Command="{Binding TBAssingPagesCommand}" ToolTip="Assing Pages">
                            <StackPanel>
                                <Image Source="Icons/choose.png" Width="16" Height="16" />
                                <TextBlock Text="Assing Pages"  />
                            </StackPanel>
                        </Button>

                    </ToolBar>
                </ToolBarTray>
                <xctk:PropertyGrid Grid.Row="1" x:Name="PanelFilter" AutoGenerateProperties="True"
                        ShowDescriptionByTooltip="False" ShowSearchBox="False" ShowSortOptions="False"
                        ShowSummary="False" ShowTitle="False" SelectedObject="{Binding OsListFilter}">
                </xctk:PropertyGrid>
                <!-- ListBox -->
                <ListBox x:Name="ListaOs" Grid.Row="2" Margin="5" ItemsSource="{Binding VistaFiltrada}"
                        SelectedItem="{Binding SelectedItemOsList, Mode=TwoWay}"
                        SelectionChanged="ListaOs_SelectionChanged">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Nombre}">
                                <TextBlock.Style>
                                    <Style TargetType="TextBlock">
                                        <Style.Triggers>
                                            <DataTrigger Binding="{Binding Path=Enable_On_All_Pages}" Value="True">
                                                <Setter Property="Foreground" Value="Blue" />
                                            </DataTrigger>
                                            <DataTrigger Binding="{Binding Path=Enable_On_All_Pages}" Value="False">
                                                <Setter Property="Foreground" Value="Black" />
                                            </DataTrigger>
                                        </Style.Triggers>
                                    </Style>
                                </TextBlock.Style>
                            </TextBlock>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>

                <!-- GridSplitter -->
                <GridSplitter Grid.Row="3" Height="5" HorizontalAlignment="Stretch" Background="Gray"
                        ResizeDirection="Rows" VerticalAlignment="Center" />

                <!-- PanelEdicion -->
                <xctk:PropertyGrid Grid.Row="4" Margin="5" x:Name="PanelEdicion" AutoGenerateProperties="False"
                        ShowDescriptionByTooltip="True">
                    <xctk:PropertyGrid.EditorDefinitions>

                        <!-- String -->
                        <xctk:EditorTemplateDefinition>
                            <xctk:EditorTemplateDefinition.TargetProperties>
                                <xctk:TargetPropertyType Type="{x:Type sys:String}" />
                            </xctk:EditorTemplateDefinition.TargetProperties>
                            <xctk:EditorTemplateDefinition.EditingTemplate>
                                <DataTemplate>
                                    <TextBox Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"
                                            Text="{Binding Value}" />
                                </DataTemplate>
                            </xctk:EditorTemplateDefinition.EditingTemplate>
                        </xctk:EditorTemplateDefinition>

                        <!-- Velocidad -->
                        <xctk:EditorTemplateDefinition TargetProperties="VelocidadActual">
                            <xctk:EditorTemplateDefinition.EditingTemplate>
                                <DataTemplate>
                                    <xctk:SingleUpDown Increment="0.01" Background="Beige"
                                            Text="{Binding Value, Converter={StaticResource floatFormatter}}"
                                            FontWeight="Bold" />
                                </DataTemplate>
                            </xctk:EditorTemplateDefinition.EditingTemplate>
                        </xctk:EditorTemplateDefinition>

                        <!-- Float -->
                        <xctk:EditorTemplateDefinition>
                            <xctk:EditorTemplateDefinition.TargetProperties>
                                <xctk:TargetPropertyType Type="{x:Type sys:Single}" />
                            </xctk:EditorTemplateDefinition.TargetProperties>
                            <xctk:EditorTemplateDefinition.EditingTemplate>
                                <DataTemplate>
                                    <xctk:SingleUpDown Increment="0.01"
                                            Text="{Binding Value, Converter={StaticResource floatFormatter}}" />
                                </DataTemplate>
                            </xctk:EditorTemplateDefinition.EditingTemplate>
                        </xctk:EditorTemplateDefinition>

                        <!-- Double -->
                        <xctk:EditorTemplateDefinition>
                            <xctk:EditorTemplateDefinition.TargetProperties>
                                <xctk:TargetPropertyType Type="{x:Type sys:Double}" />
                            </xctk:EditorTemplateDefinition.TargetProperties>
                            <xctk:EditorTemplateDefinition.EditingTemplate>
                                <DataTemplate>
                                    <TextBox Text="{Binding Value, Converter={StaticResource doubleFormatter}}" />
                                </DataTemplate>
                            </xctk:EditorTemplateDefinition.EditingTemplate>
                        </xctk:EditorTemplateDefinition>

                        <!-- osBuscarCoincidencias -->
                        <xctk:EditorTemplateDefinition>
                            <xctk:EditorTemplateDefinition.TargetProperties>
                                <xctk:TargetPropertyType Type="{x:Type ObjetosExtraccion:osBuscarCoincidencias}" />
                            </xctk:EditorTemplateDefinition.TargetProperties>
                            <xctk:EditorTemplateDefinition.EditingTemplate>
                                <DataTemplate>
                                    <ComboBox ItemsSource="{Binding DataContext.ObjetosSimulables, 
                                               RelativeSource={RelativeSource AncestorType=Window}, 
                                               Converter={StaticResource SubclassFilterConverterosBuscarCoincidencias}}"
                                            SelectedItem="{Binding Value}" DisplayMemberPath="Nombre" IsEditable="True" />
                                </DataTemplate>
                            </xctk:EditorTemplateDefinition.EditingTemplate>
                        </xctk:EditorTemplateDefinition>

                        <!-- osVMmotorSim -->
                        <xctk:EditorTemplateDefinition>
                            <xctk:EditorTemplateDefinition.TargetProperties>
                                <xctk:TargetPropertyType Type="{x:Type ObjetosSim:osVMmotorSim}" />
                            </xctk:EditorTemplateDefinition.TargetProperties>
                            <xctk:EditorTemplateDefinition.EditingTemplate>
                                <DataTemplate>
                                    <ComboBox ItemsSource="{Binding DataContext.ObjetosSimulables, 
                                               RelativeSource={RelativeSource AncestorType=Window}, 
                                               Converter={StaticResource SubclassFilterConverterosVMMotor}}"
                                            SelectedItem="{Binding Value}" DisplayMemberPath="Nombre" />
                                </DataTemplate>
                            </xctk:EditorTemplateDefinition.EditingTemplate>
                        </xctk:EditorTemplateDefinition>

                       <!-- osBase -->
                        <xctk:EditorTemplateDefinition>
                            <xctk:EditorTemplateDefinition.TargetProperties>
                                <xctk:TargetPropertyType Type="{x:Type ObjetosSim:osBase}" />
                            </xctk:EditorTemplateDefinition.TargetProperties>
                            <xctk:EditorTemplateDefinition.EditingTemplate>
                                <DataTemplate>
                                    <ComboBox
                                            ItemsSource="{Binding DataContext.ObjetosSimulables, RelativeSource={RelativeSource AncestorType=Window}}"
                                            SelectedItem="{Binding Value}" DisplayMemberPath="Nombre" />
                                </DataTemplate>
                            </xctk:EditorTemplateDefinition.EditingTemplate>
                        </xctk:EditorTemplateDefinition>

                    </xctk:PropertyGrid.EditorDefinitions>
                </xctk:PropertyGrid>

                <ToolBarTray Grid.Row="5">
                    <ToolBar>
                        <Button Command="{Binding TBEliminarUserControlCommand}" ToolTip="Eliminar Control">
                            <StackPanel>
                                <Image Source="Icons/borrar.png" Width="16" Height="16" />
                                <TextBlock Text="Eliminar" />
                            </StackPanel>
                        </Button>
                        <Button Command="{Binding TBDuplicarUserControlCommand}" ToolTip="Duplicar Control">
                            <StackPanel>
                                <Image Source="Icons/duplicate.png" Width="16" Height="16" />
                                <TextBlock Text="Duplicar" />
                            </StackPanel>
                        </Button>
                    </ToolBar>
                </ToolBarTray>

            </Grid>

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