<pu:WindowX x:Class="Plugin.DeviceConfig.BatchGenerateModal"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            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:pw="https://opensource.panuon.com/wpf"
            xmlns:pu="https://opensource.panuon.com/wpf-ui"
            xmlns:dp="clr-namespace:HMI.UI.DpUtil;assembly=HMI.UI"
            xmlns:local="clr-namespace:Plugin.DeviceConfig"
            mc:Ignorable="d"
            Title="批量生成设备"
            SizeToContent="Height"
            Width="780"
            WindowStartupLocation="CenterOwner"
            Style="{StaticResource ModalWindow}">
    <pu:WindowX.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/HMI.UI;component/Style/PanuonListView.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </pu:WindowX.Resources>

    <Grid Margin="16">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>

        <!-- 参数输入区 -->
        <GroupBox Grid.Row="0" Header="生成参数" FontWeight="SemiBold" Margin="0,0,0,12">
            <Grid Margin="8">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="120"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="120"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition Height="36"/>
                    <RowDefinition Height="36"/>
                    <RowDefinition Height="36"/>
                    <RowDefinition Height="36"/>
                    <RowDefinition Height="36"/>
                </Grid.RowDefinitions>

                <TextBlock Grid.Row="0" Grid.Column="0" Text="设备类型 *" VerticalAlignment="Center" Style="{StaticResource ListTableTextBlock}"/>
                <ComboBox Grid.Row="0" Grid.Column="1" x:Name="cbDeviceType" VerticalAlignment="Center" Margin="4,0"/>

                <TextBlock Grid.Row="0" Grid.Column="2" Text="驱动类型" VerticalAlignment="Center" Style="{StaticResource ListTableTextBlock}"/>
                <TextBox Grid.Row="0" Grid.Column="3" x:Name="tbDriverType" VerticalAlignment="Center"
                         Style="{StaticResource EditorTextBoxStyle}" Margin="4,0"/>

                <TextBlock Grid.Row="1" Grid.Column="0" Text="传输方式 *" VerticalAlignment="Center" Style="{StaticResource ListTableTextBlock}"/>
                <ComboBox Grid.Row="1" Grid.Column="1" x:Name="cbTransport" VerticalAlignment="Center" Margin="4,0"/>

                <TextBlock Grid.Row="1" Grid.Column="2" Text="设备数量 *" VerticalAlignment="Center" Style="{StaticResource ListTableTextBlock}"/>
                <pu:NumberInput Grid.Row="1" Grid.Column="3" x:Name="niDeviceCount" VerticalAlignment="Center"
                                Style="{StaticResource FormNumberInput}" Margin="4,0" Minimum="1" Maximum="100" Value="1"/>

                <TextBlock Grid.Row="2" Grid.Column="0" Text="每设备通道数" VerticalAlignment="Center" Style="{StaticResource ListTableTextBlock}"/>
                <pu:NumberInput Grid.Row="2" Grid.Column="1" x:Name="niChannelsPerDevice" VerticalAlignment="Center"
                                Style="{StaticResource FormNumberInput}" Margin="4,0" Minimum="0" Maximum="64" Value="1"/>

                <TextBlock Grid.Row="2" Grid.Column="2" Text="起始端口号" VerticalAlignment="Center" Style="{StaticResource ListTableTextBlock}"/>
                <pu:NumberInput Grid.Row="2" Grid.Column="3" x:Name="niStartPort" VerticalAlignment="Center"
                                Style="{StaticResource FormNumberInput}" Margin="4,0" Minimum="1" Maximum="65535" Value="30000"/>

                <TextBlock Grid.Row="3" Grid.Column="0" Text="地址生成规则" VerticalAlignment="Center" Style="{StaticResource ListTableTextBlock}"/>
                <TextBox Grid.Row="3" Grid.Column="1" Grid.ColumnSpan="3" x:Name="tbAddressRule" VerticalAlignment="Center"
                         Style="{StaticResource EditorTextBoxStyle}" Margin="4,0"
                         pu:TextBoxHelper.Watermark="例: 192.168.10.{0}，{0}为序号占位符"/>
                         
                <TextBlock Grid.Row="4" Grid.Column="0" Text="Slot映射起点" VerticalAlignment="Center" Style="{StaticResource ListTableTextBlock}"/>
                <TextBox Grid.Row="4" Grid.Column="1" x:Name="tbSlotStart" VerticalAlignment="Center"
                         Style="{StaticResource EditorTextBoxStyle}" Margin="4,0"
                         pu:TextBoxHelper.Watermark="例: Slot001"/>
                         
                <TextBlock Grid.Row="4" Grid.Column="2" Text="设备ID前缀" VerticalAlignment="Center" Style="{StaticResource ListTableTextBlock}"/>
                <TextBox Grid.Row="4" Grid.Column="3" x:Name="tbDeviceIdPrefix" VerticalAlignment="Center"
                         Style="{StaticResource EditorTextBoxStyle}" Margin="4,0"
                         pu:TextBoxHelper.Watermark="例: PSU"/>
            </Grid>
        </GroupBox>

        <!-- 预览区 -->
        <GroupBox Grid.Row="1" Header="生成预览" FontWeight="SemiBold" Margin="0,0,0,12">
            <Grid Margin="8">
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="200"/>
                </Grid.RowDefinitions>

                <TextBlock Grid.Row="0" x:Name="tbConflictMsg" Foreground="Red" Margin="0,0,0,4"
                           TextWrapping="Wrap" Visibility="Collapsed"/>

                <ListView Grid.Row="1" Style="{StaticResource DefaultListTable}" x:Name="previewListView"
                          VirtualizingPanel.IsVirtualizing="True"
                          VirtualizingPanel.VirtualizationMode="Standard">
                    <ListView.View>
                        <GridView AllowsColumnReorder="False">
                            <GridViewColumn Width="50" Header="#">
                                <GridViewColumn.CellTemplate>
                                    <DataTemplate>
                                        <Border Style="{StaticResource CellBorder}">
                                            <TextBlock Style="{StaticResource ListTableTextBlock}"
                                                Text="{Binding Converter={StaticResource lvRowNumber},
                                                RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=ListViewItem,AncestorLevel=1}}"/>
                                        </Border>
                                    </DataTemplate>
                                </GridViewColumn.CellTemplate>
                            </GridViewColumn>
                            <GridViewColumn Width="140" Header="DeviceId">
                                <GridViewColumn.CellTemplate>
                                    <DataTemplate>
                                        <Border Style="{StaticResource CellBorder}">
                                            <TextBlock Style="{StaticResource ListTableTextBlock}" Text="{Binding DeviceId}"/>
                                        </Border>
                                    </DataTemplate>
                                </GridViewColumn.CellTemplate>
                            </GridViewColumn>
                            <GridViewColumn Width="100" Header="Kind">
                                <GridViewColumn.CellTemplate>
                                    <DataTemplate>
                                        <Border Style="{StaticResource CellBorder}">
                                            <TextBlock Style="{StaticResource ListTableTextBlock}" Text="{Binding Kind}"/>
                                        </Border>
                                    </DataTemplate>
                                </GridViewColumn.CellTemplate>
                            </GridViewColumn>
                            <GridViewColumn Width="180" Header="Endpoint">
                                <GridViewColumn.CellTemplate>
                                    <DataTemplate>
                                        <Border Style="{StaticResource CellBorder}">
                                            <TextBlock Style="{StaticResource ListTableTextBlock}" Text="{Binding Endpoint}"/>
                                        </Border>
                                    </DataTemplate>
                                </GridViewColumn.CellTemplate>
                            </GridViewColumn>
                            <GridViewColumn Width="80" Header="通道数">
                                <GridViewColumn.CellTemplate>
                                    <DataTemplate>
                                        <Border Style="{StaticResource CellBorder}">
                                            <TextBlock Style="{StaticResource ListTableTextBlock}" Text="{Binding ChannelCount}"/>
                                        </Border>
                                    </DataTemplate>
                                </GridViewColumn.CellTemplate>
                            </GridViewColumn>
                            <GridViewColumn Width="100" Header="Slot起点">
                                <GridViewColumn.CellTemplate>
                                    <DataTemplate>
                                        <Border Style="{StaticResource CellBorder}">
                                            <TextBlock Style="{StaticResource ListTableTextBlock}" Text="{Binding SlotStart}"/>
                                        </Border>
                                    </DataTemplate>
                                </GridViewColumn.CellTemplate>
                            </GridViewColumn>
                        </GridView>
                    </ListView.View>
                </ListView>
            </Grid>
        </GroupBox>

        <!-- 底部按钮 -->
        <StackPanel Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Right" dp:StackPanelHelper.ChildSpace="10" Margin="0,12,0,0">
            <Button x:Name="previewBtn" Click="PreviewBtn_Click" Content="生成预览"
                    Style="{StaticResource RfhBtn}" Width="90"/>
            <Button x:Name="saveBtn" Click="SaveBtn_Click" Content="确认保存"
                    Style="{StaticResource AddBtn}" Width="90"/>
            <Button x:Name="cancelBtn" Click="CancelBtn_Click" Content="取消"
                    Style="{StaticResource RfhBtn}" Width="90"/>
        </StackPanel>
    </Grid>
</pu:WindowX>
