<UserControl x:Class="NETworkManager.Views.PuTTYSessionDialog"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:Converter="clr-namespace:NETworkManager.Converters"
             xmlns:Validator="clr-namespace:NETworkManager.Validators"
             xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls"        
             mc:Ignorable="d" Loaded="UserControl_Loaded">
    <UserControl.Resources>
        <Converter:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
        <Converter:BooleanReverseToVisibilityConverter x:Key="BooleanReverseToVisibilityConverter" />
    </UserControl.Resources>
    <Grid Margin="0,20">
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
            <RowDefinition Height="10" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
        <Grid Grid.Row="0">
            <Grid.Resources>
                <Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource CenterTextBlock}" />
                <Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource DefaultTextBox}" />
            </Grid.Resources>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="1*" />
                <ColumnDefinition Width="10" />
                <ColumnDefinition Width="1*" />
                <ColumnDefinition Width="Auto" />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition Height="10" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="10" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="10" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="10" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="10" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="10" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="10" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="10" />
                <RowDefinition Height="Auto" />
            </Grid.RowDefinitions>
            <TextBlock Grid.Column="0" Grid.Row="0" Text="{DynamicResource String_Name}" />
            <TextBox x:Name="txtName" Grid.Column="2" Grid.Row="0" mah:TextBoxHelper.Watermark="{DynamicResource String_Watermark_ExampleRemoteDesktopSessionName}">
                <TextBox.Text>
                    <Binding Path="Name" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged">
                        <Binding.ValidationRules>
                            <Validator:EmptyValidator ValidatesOnTargetUpdated="True" />
                        </Binding.ValidationRules>
                    </Binding>
                </TextBox.Text>
            </TextBox>
            <TextBlock Grid.Column="0" Grid.Row="2" Text="{DynamicResource String_Mode}" />
            <Grid Grid.Column="2" Grid.Row="2">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition Width="10" />
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition Width="10" />
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition Width="10" />
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition Width="10" />
                    <ColumnDefinition Width="Auto" />
                </Grid.ColumnDefinitions>
                <RadioButton Grid.Column="0" Content="{DynamicResource String_SSH}" IsChecked="{Binding UseSSH}" />
                <RadioButton Grid.Column="2" Content="{DynamicResource String_Telnet}" IsChecked="{Binding UseTelnet}" />
                <RadioButton Grid.Column="4" Content="{DynamicResource String_Serial}" IsChecked="{Binding UseSerial}" />
                <RadioButton Grid.Column="6" Content="{DynamicResource String_Rlogin}" IsChecked="{Binding UseRlogin}" />
                <RadioButton Grid.Column="8" Content="{DynamicResource String_RAW}" IsChecked="{Binding UseRAW}" />
            </Grid>
            <TextBlock Grid.Column="0" Grid.Row="4">
                <TextBlock.Style>
                    <Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource CenterTextBlock}">
                        <Setter Property="Text" Value="{StaticResource String_Host}" />
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding UseSerial}" Value="True">
                                <Setter Property="Text" Value="{StaticResource String_SerialLine}" />
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </TextBlock.Style>
            </TextBlock>
            <TextBox x:Name="txtHost" Grid.Column="2" Grid.Row="4" mah:TextBoxHelper.Watermark="{DynamicResource String_Watermark_ExampleHostname}" Visibility="{Binding UseSerial, Converter={StaticResource BooleanReverseToVisibilityConverter}}">
                <TextBox.Text>
                    <Binding Path="Host" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged">
                        <Binding.ValidationRules>
                            <Validator:EmptyValidator ValidatesOnTargetUpdated="True" />
                            <Validator:NoSpacesValidator ValidatesOnTargetUpdated="True" />
                        </Binding.ValidationRules>
                    </Binding>
                </TextBox.Text>
            </TextBox>
            <TextBox x:Name="txtSerialLine" Grid.Column="2" Grid.Row="4" mah:TextBoxHelper.Watermark="{DynamicResource String_Watermark_ExampleSerialLine}" Visibility="{Binding UseSerial, Converter={StaticResource BooleanToVisibilityConverter}}">
                <TextBox.Text>
                    <Binding Path="SerialLine" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged">
                        <Binding.ValidationRules>
                            <Validator:EmptyValidator ValidatesOnTargetUpdated="True" />
                            <Validator:NoSpacesValidator ValidatesOnTargetUpdated="True" />
                        </Binding.ValidationRules>
                    </Binding>
                </TextBox.Text>
            </TextBox>
            <TextBlock Grid.Column="0" Grid.Row="6">
                <TextBlock.Style>
                    <Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource CenterTextBlock}">
                        <Setter Property="Text" Value="{DynamicResource String_Port}" />
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding UseSerial}" Value="True">
                                <Setter Property="Text" Value="{DynamicResource String_Baud}" />
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </TextBlock.Style>
            </TextBlock>
            <TextBox x:Name="txtPort" Grid.Column="2" Grid.Row="6" mah:TextBoxHelper.Watermark="{DynamicResource String_Watermark_ExamplePort22}" Visibility="{Binding UseSerial, Converter={StaticResource BooleanReverseToVisibilityConverter}}">
                <TextBox.Text>
                    <Binding Path="Port" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged">
                        <Binding.ValidationRules>
                            <Validator:EmptyValidator ValidatesOnTargetUpdated="True" />
                            <Validator:PortValidator ValidatesOnTargetUpdated="True" />
                        </Binding.ValidationRules>
                    </Binding>
                </TextBox.Text>
            </TextBox>
            <TextBox x:Name="txtBaud" Grid.Column="2" Grid.Row="6" mah:TextBoxHelper.Watermark="{DynamicResource String_Watermark_ExampleBaud9600}" Visibility="{Binding UseSerial, Converter={StaticResource BooleanToVisibilityConverter}}">
                <TextBox.Text>
                    <Binding Path="Baud" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged">
                        <Binding.ValidationRules>
                            <Validator:EmptyValidator ValidatesOnTargetUpdated="True" />
                            <Validator:BaudValidator ValidatesOnTargetUpdated="True" />
                        </Binding.ValidationRules>
                    </Binding>
                </TextBox.Text>
            </TextBox>
            <TextBlock Grid.Column="0" Grid.Row="8" Text="{DynamicResource String_Username}" />
            <TextBox Grid.Column="2" Grid.Row="8" mah:TextBoxHelper.Watermark="{DynamicResource String_Watermark_ExampleUsername}">
                <TextBox.Text>
                    <Binding Path="Username" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged">
                        <Binding.ValidationRules>
                            <Validator:NoSpacesValidator ValidatesOnTargetUpdated="True" />
                        </Binding.ValidationRules>
                    </Binding>
                </TextBox.Text>
            </TextBox>
            <TextBlock Grid.Column="0" Grid.Row="10" Text="{DynamicResource String_Profile}" />
            <TextBox Grid.Column="2" Grid.Row="10">
                <TextBox.Text>
                    <Binding Path="Profile" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged">
                        <Binding.ValidationRules>
                            <Validator:NoSpacesValidator ValidatesOnTargetUpdated="True" />
                        </Binding.ValidationRules>
                    </Binding>
                </TextBox.Text>
            </TextBox>
            <TextBlock Grid.Column="0" Grid.Row="12" Text="{DynamicResource String_AdditionalCommandLine}" />
            <TextBox Grid.Column="2" Grid.Row="12" Text="{Binding AdditionalCommandLine}" Style="{StaticResource DefaultTextBox}" />
            <TextBlock Grid.Column="0" Grid.Row="14" Text="{DynamicResource String_Group}" />
            <ComboBox x:Name="cbGroup" Grid.Column="2" Grid.Row="14" Style="{StaticResource EditableComboBox}" ItemsSource="{Binding Groups}" mah:TextBoxHelper.Watermark="{DynamicResource String_Watermark_ExampleGroupServers}">
                <ComboBox.Text>
                    <Binding Path="Group" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged">
                        <Binding.ValidationRules>
                            <Validator:EmptyValidator ValidatesOnTargetUpdated="True" />
                        </Binding.ValidationRules>
                    </Binding>
                </ComboBox.Text>
            </ComboBox>
            <TextBlock Grid.Column="0" Grid.Row="16" Text="{DynamicResource String_Tags}" />
            <TextBox Grid.Column="2" Grid.Row="16" Text="{Binding Tags, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" mah:TextBoxHelper.Watermark="{DynamicResource String_Watermark_ExampleTags}"/>
            <Rectangle Width="24" Height="24" Grid.Column="3" Grid.Row="16" ToolTip="{DynamicResource String_HelpMessage_Tags}" Style="{StaticResource HelpImageRectangle}" Margin="10,0,0,0">
                <Rectangle.Resources>
                    <Style TargetType="{x:Type ToolTip}" BasedOn="{StaticResource HelpToolTip}" />
                </Rectangle.Resources>
            </Rectangle>
        </Grid>
        <StackPanel Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Right">
            <Button Content="{DynamicResource String_Button_Cancel}" Command="{Binding CancelCommand}" IsCancel="True" Style="{StaticResource DefaultButton}" />
            <Button Content="{DynamicResource String_Button_Save}" Command="{Binding SaveCommand}" IsDefault="True" Margin="10,0,0,0">
                <Button.Style>
                    <Style TargetType="{x:Type Button}" BasedOn="{StaticResource HighlightedButton}">
                        <Setter Property="IsEnabled" Value="False" />
                        <Style.Triggers>
                            <MultiDataTrigger>
                                <MultiDataTrigger.Conditions>
                                    <Condition Binding="{Binding UseSerial}" Value="True" />
                                    <Condition Binding="{Binding Path=(Validation.HasError), ElementName=txtName}" Value="False" />
                                    <Condition Binding="{Binding Path=(Validation.HasError), ElementName=txtSerialLine}" Value="False" />
                                    <Condition Binding="{Binding Path=(Validation.HasError), ElementName=txtBaud}" Value="False" />
                                    <Condition Binding="{Binding Path=(Validation.HasError), ElementName=cbGroup}" Value="False" />
                                    <Condition Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl}}, Path=DataContext.SessionInfoChanged}" Value="True" />
                                </MultiDataTrigger.Conditions>
                                <MultiDataTrigger.Setters>
                                    <Setter Property="IsEnabled" Value="True" />
                                </MultiDataTrigger.Setters>
                            </MultiDataTrigger>
                            <MultiDataTrigger>
                                <MultiDataTrigger.Conditions>
                                    <Condition Binding="{Binding UseSerial}" Value="False" />
                                    <Condition Binding="{Binding Path=(Validation.HasError), ElementName=txtName}" Value="False" />
                                    <Condition Binding="{Binding Path=(Validation.HasError), ElementName=txtHost}" Value="False" />
                                    <Condition Binding="{Binding Path=(Validation.HasError), ElementName=txtPort}" Value="False" />
                                    <Condition Binding="{Binding Path=(Validation.HasError), ElementName=cbGroup}" Value="False" />
                                    <Condition Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl}}, Path=DataContext.SessionInfoChanged}" Value="True" />
                                </MultiDataTrigger.Conditions>
                                <MultiDataTrigger.Setters>
                                    <Setter Property="IsEnabled" Value="True" />
                                </MultiDataTrigger.Setters>
                            </MultiDataTrigger>
                        </Style.Triggers>
                    </Style>
                </Button.Style>
            </Button>
        </StackPanel>
    </Grid>
</UserControl>
