<Window x:Class="EonaCat.PortMonitor.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="EonaCat Port Monitor" Height="600" Width="1500" WindowStartupLocation="CenterScreen">

    <Window.Resources>
        <ResourceDictionary Source="/Themes.xaml" />
    </Window.Resources>

    <Grid Background="{DynamicResource DynamicBackgroundColor}">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>

        <!-- Define a Grid inside the first Row (to contain the StackPanel and the button) -->
        <Grid Grid.Row="0">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" />
                <!-- Flexible space -->
                <ColumnDefinition Width="Auto" />
                <!-- Fixed width for the button -->
            </Grid.ColumnDefinitions>

            <!-- Filter and other elements go in the first column -->
            <StackPanel Grid.Column="0" Orientation="Horizontal" Margin="10">
                <TextBlock Text="Filter by Keyword:" VerticalAlignment="Center" Margin="5" />
                <TextBox Name="KeywordFilter" Width="200" Margin="5" KeyUp="FilterConnections_KeyUp"/>
            </StackPanel>

            <!-- Theme switch button goes in the second column (aligned to the right) -->
            <Button x:Name="btnTheme" Content="🌙" Width="40" Height="30" Margin="10,0" VerticalAlignment="Center" Grid.Column="1" Click="btnTheme_Click" />
        </Grid>

        <!-- Network Statistics Section -->
        <StackPanel Grid.Row="1" Orientation="Horizontal" Margin="10">
            <TextBlock Name="TcpUdpStatsText" VerticalAlignment="Center" FontSize="14" Margin="5"  />
        </StackPanel>

        <!-- DataGrid for Connections -->
        <TabControl Margin="10" Grid.Row="2" >
            <TabItem Header="Connections" >
                <DataGrid Name="NetworkDataGrid" AutoGenerateColumns="False" IsReadOnly="True" Margin="10" PreviewMouseDoubleClick="DataGrid_PreviewMouseDoubleClick">
                    <DataGrid.Columns>
                        <DataGridTextColumn Header="Protocol" Binding="{Binding Protocol}" Width="100"/>
                        <DataGridTextColumn Header="Local Address" Binding="{Binding LocalAddress}" Width="200"/>
                        <DataGridTextColumn Header="Local Port" Binding="{Binding LocalPort}" Width="100"/>
                        <DataGridTextColumn Header="Remote Address" Binding="{Binding RemoteAddress}" Width="200"/>
                        <DataGridTextColumn Header="Remote Port" Binding="{Binding RemotePort}" Width="100"/>
                        <DataGridTextColumn Header="State" Binding="{Binding State}" Width="150"/>
                        <DataGridTextColumn Header="Process Name" Binding="{Binding ProcessName}" Width="200"/>
                        <DataGridTextColumn Header="Process Id" Binding="{Binding ProcessId}" Width="100"/>
                        <DataGridTextColumn Header="Connection Duration" Binding="{Binding ConnectionDuration}" Width="150"/>
                    </DataGrid.Columns>
                </DataGrid>
            </TabItem>
            <TabItem Header="Inbound Connections" >
                <DataGrid Name="InboundDataGrid" AutoGenerateColumns="False" IsReadOnly="True" Margin="10" PreviewMouseDoubleClick="DataGrid_PreviewMouseDoubleClick">
                    <DataGrid.Columns>
                        <DataGridTextColumn Header="Protocol" Binding="{Binding Protocol}" Width="100"/>
                        <DataGridTextColumn Header="Local Address" Binding="{Binding LocalAddress}" Width="200"/>
                        <DataGridTextColumn Header="Local Port" Binding="{Binding LocalPort}" Width="100"/>
                        <DataGridTextColumn Header="Remote Address" Binding="{Binding RemoteAddress}" Width="200"/>
                        <DataGridTextColumn Header="Remote Port" Binding="{Binding RemotePort}" Width="100"/>
                        <DataGridTextColumn Header="State" Binding="{Binding State}" Width="150"/>
                        <DataGridTextColumn Header="Process Name" Binding="{Binding ProcessName}" Width="200"/>
                        <DataGridTextColumn Header="Process Id" Binding="{Binding ProcessId}" Width="100"/>
                        <DataGridTextColumn Header="Connection Duration" Binding="{Binding ConnectionDuration}" Width="150"/>
                    </DataGrid.Columns>
                </DataGrid>
            </TabItem>
            <TabItem Header="Outbound Connections" >
                <DataGrid Name="OutboundDataGrid" AutoGenerateColumns="False" IsReadOnly="True" Margin="10" PreviewMouseDoubleClick="DataGrid_PreviewMouseDoubleClick">
                    <DataGrid.Columns>
                        <DataGridTextColumn Header="Protocol" Binding="{Binding Protocol}" Width="100"/>
                        <DataGridTextColumn Header="Local Address" Binding="{Binding LocalAddress}" Width="200"/>
                        <DataGridTextColumn Header="Local Port" Binding="{Binding LocalPort}" Width="100"/>
                        <DataGridTextColumn Header="Remote Address" Binding="{Binding RemoteAddress}" Width="200"/>
                        <DataGridTextColumn Header="Remote Port" Binding="{Binding RemotePort}" Width="100"/>
                        <DataGridTextColumn Header="State" Binding="{Binding State}" Width="150"/>
                        <DataGridTextColumn Header="Process Name" Binding="{Binding ProcessName}" Width="200"/>
                        <DataGridTextColumn Header="Process Id" Binding="{Binding ProcessId}" Width="100"/>
                        <DataGridTextColumn Header="Connection Duration" Binding="{Binding ConnectionDuration}" Width="150"/>
                    </DataGrid.Columns>
                </DataGrid>
            </TabItem>
        </TabControl>

        <!-- Export Section -->
        <StackPanel Grid.Row="3" Orientation="Horizontal" Margin="10">
            <Button Content="Export to JSON" Width="120" Height="30" Margin="10,0" VerticalAlignment="Center" Click="ExportToJsonButton_Click"   />
            <Button Content="Export to XML" Width="120" Height="30" Margin="10,0" VerticalAlignment="Center" Click="ExportToXmlButton_Click"  />
            <Button Content="Export to CSV" Width="120" Height="30" Margin="10,0" VerticalAlignment="Center" Click="ExportToCsvButton_Click"  />
            <Button Content="Export to HTML" Width="120" Height="30" Margin="10,0" VerticalAlignment="Center" Click="ExportToHtmlButton_Click"  />
            <Button Content="Save Filter Preset" Width="120" Height="30" Margin="10,0" VerticalAlignment="Center" Click="SaveFilterPresetButton_Click"  />
            <Button Content="Load Filter Preset" Width="120" Height="30" Margin="10,0" VerticalAlignment="Center" Click="LoadFilterPresetButton_Click"  />
            <Button Content="Kill Process" Width="120" Height="30" Margin="10,0" VerticalAlignment="Center" Click="KillProcessButton_Click"  />
            <Button Content="IP Lookup" Width="120" Height="30" Margin="10,0" VerticalAlignment="Center" Click="IpLookupButton_Click"  />
            <Button Content="Block IP" Width="120" Height="30" Margin="10,0" VerticalAlignment="Center" Click="BlockIpButton_Click"  />
            <StackPanel>
                <CheckBox x:Name="chkMinimize" Content="Minimize on start" VerticalContentAlignment="Center" Width="120" Height="30" Margin="10,0" VerticalAlignment="Center" Checked="chkMinimize_Checked"  />
                <CheckBox x:Name="chkShowPopups" Content="Show notifications" VerticalContentAlignment="Center" Width="120" Height="30" Margin="10,0" VerticalAlignment="Center" IsChecked="True" Checked="chkShowPopups_Checked"  />
            </StackPanel>
        </StackPanel>
    </Grid>
</Window>