<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="TINK.View.Settings.SettingsPage"
             xmlns:conv="clr-namespace:TINK.View.Settings">

    <ContentPage.Resources>
        <conv:AnyPermissionToVisibleConverter x:Key="Frame_Converter"/>
        <conv:PermissionToVisibleConverter x:Key="PickCopriServer_Converter" VisibleFlag="PickCopriServer"/>
        <conv:PermissionToVisibleConverter x:Key="ManagePolling_Converter" VisibleFlag="ManagePolling"/>
        <conv:PermissionToVisibleConverter x:Key="ManageCopriCacheExpiration_Converter" VisibleFlag="ManageCopriCacheExpiration"/>
        <conv:PermissionToVisibleConverter x:Key="PickLockServiceImplementation_Converter" VisibleFlag="PickLockServiceImplementation"/>
        <conv:PermissionToVisibleConverter x:Key="PickLocationServiceImplementation_Converter" VisibleFlag="PickLocationServiceImplementation"/>
        <conv:PermissionToVisibleConverter x:Key="PickLoggingLevel_Converter" VisibleFlag="PickLoggingLevel"/>
        <conv:PermissionToVisibleConverter x:Key="ReportLevel_Converter" VisibleFlag="ReportLevel"/>
        <conv:PermissionToVisibleConverter x:Key="ShowDiagnostics_Converter" VisibleFlag="ShowDiagnostics"/>
        <conv:PermissionToVisibleConverter x:Key="SwitchSiteCaching_Converter" VisibleFlag="SwitchNoSiteCaching"/>
    </ContentPage.Resources>

    <ContentPage.Content>
        <ScrollView>
            <Frame>
                <StackLayout>
                    <!-- 
                    <Button Text="Feedback" Clicked="OnFeedbackClickedAsync"/>
                    -->
                    <Frame>
                        <StackLayout>
                            <Label Text="Karte auf aktuelle Position ausrichten"/>
                            <Switch IsToggled="{Binding CenterMapToCurrentLocation}"/>
                        </StackLayout>
                    </Frame>
                    <!-- Filter on view TINK/ Konrad -->
                    <Frame IsVisible="{Binding IsGroupFilterVisible}">
                        <StackLayout>
                            <Label Text="Ausblenden/ Einblenden"/>
                            <ListView
                                HasUnevenRows="True"
                                HeightRequest="120"
                                x:Name="Filters">
                                <ListView.ItemTemplate>
                                    <DataTemplate>
                                        <ViewCell IsEnabled="{Binding IsEnabled}">
                                            <StackLayout Orientation="Horizontal">
                                                <Label Text="{Binding Text}"/>
                                                <Switch IsToggled="{Binding IsActivated}"/>
                                            </StackLayout>
                                        </ViewCell>
                                    </DataTemplate>
                                </ListView.ItemTemplate>
                            </ListView>
                        </StackLayout>
                    </Frame>
                    <Frame 
                        IsVisible="{Binding DebugLevel, Converter={StaticResource Frame_Converter}}">
                        <StackLayout>
                            <!-- Themes -->
                            <Label
                                IsVisible="{Binding DebugLevel, Converter={StaticResource PickCopriServer_Converter}}"
                                Text="Theme"/>
                            <Picker
                                IsVisible="{Binding DebugLevel, Converter={StaticResource PickCopriServer_Converter}}"
                                ItemsSource="{Binding Themes.ServicesTextList}"
                                SelectedItem="{Binding Themes.ActiveText}"/>
                        </StackLayout>
                    </Frame>
                    <Frame
                        IsVisible="{Binding DebugLevel, Converter={StaticResource Frame_Converter}}">
                        <!-- COPRI server selection -->
                        <StackLayout>
                            <Label
                                IsVisible="{Binding DebugLevel, Converter={StaticResource PickCopriServer_Converter}}"
                                Text="{Binding CopriServerUriList.CorpiServerUriDescription}"/>
                            <Picker
                                IsVisible="{Binding DebugLevel, Converter={StaticResource PickCopriServer_Converter}}"
                                ItemsSource="{Binding CopriServerUriList.ServerTextList}"
                                SelectedItem="{Binding CopriServerUriList.NextActiveServerText}"/>
                            <Label 
                                IsVisible="{Binding DebugLevel, Converter={StaticResource ManagePolling_Converter}}"
                                Text="{Binding Polling.PollingText}"/>
                            <Switch 
                                IsVisible="{Binding DebugLevel, Converter={StaticResource ManagePolling_Converter}}"
                                IsToggled="{Binding Polling.IsActivated}"/>
                            <Label 
                                IsVisible="{Binding DebugLevel, Converter={StaticResource ManagePolling_Converter}}"
                                Text="{Binding Polling.PeriodeTotalSecondsText}"/>
                            <Stepper
                                IsVisible="{Binding DebugLevel, Converter={StaticResource ManagePolling_Converter}}"
                                Minimum="5"
                                Increment="5"
                                Maximum="600"
                                IsEnabled="{Binding Polling.IsActivated}"
                                Value="{Binding Polling.PeriodeTotalSeconds}"/>
                            <Label 
                                IsVisible="{Binding DebugLevel, Converter={StaticResource ManageCopriCacheExpiration_Converter}}"
                                Text="Time after which COPRI-cache expires [s]"/>
                            <Slider 
                                IsVisible="{Binding DebugLevel, Converter={StaticResource ManageCopriCacheExpiration_Converter}}"
                                x:Name="expiresAfter"
                                Minimum="0"
                                Maximum="15"
                                Value="{Binding ExpiresAfterTotalSeconds}"/>
                            <Entry 
                                IsVisible="{Binding DebugLevel, Converter={StaticResource ManageCopriCacheExpiration_Converter}}"
                                IsReadOnly="True" 
                                Text="{Binding ExpiresAfterTotalSecondsText}"/>
                        </StackLayout>
                    </Frame>
                    <Frame
                        IsVisible="{Binding DebugLevel, Converter={StaticResource Frame_Converter}}">
                        <!-- Lock control -->
                        <StackLayout>
                            <Label 
                                IsVisible="{Binding DebugLevel, Converter={StaticResource PickLockServiceImplementation_Converter}}"
                                Text="Lock Control" />
                            <Picker
                                IsVisible="{Binding DebugLevel, Converter={StaticResource PickLockServiceImplementation_Converter}}"
                                ItemsSource="{Binding LocksServices.Services.ServicesTextList}"
                                SelectedItem="{Binding LocksServices.Services.ActiveText}"/>
                            <Label 
                                IsVisible="{Binding DebugLevel, Converter={StaticResource PickLockServiceImplementation_Converter}}"
                                Text="Bluetooth Connect Timeout [sec]"/>
                            <Label 
                                IsVisible="{Binding DebugLevel, Converter={StaticResource PickLockServiceImplementation_Converter}}"                                    
                                Text="{Binding LocksServices.ConnectTimeoutSecText}"/>
                            <Stepper
                                IsVisible="{Binding DebugLevel, Converter={StaticResource PickLockServiceImplementation_Converter}}"
                                Minimum="0.1"
                                Increment="0.25"
                                Maximum="60"
                                Value="{Binding LocksServices.ConnectTimeoutSec}"/>
                        </StackLayout>
                    </Frame>
                    <Frame
                        IsVisible="{Binding DebugLevel, Converter={StaticResource Frame_Converter}}">
                        <!-- Geolocation -->
                        <StackLayout>

                            <Label 
                                IsVisible="{Binding DebugLevel, Converter={StaticResource PickLocationServiceImplementation_Converter}}"
                                Text="Geolocation Control" />
                            <Picker
                                IsVisible="{Binding DebugLevel, Converter={StaticResource PickLocationServiceImplementation_Converter}}"
                                ItemsSource="{Binding GeolocationServices.ServicesTextList}"
                                SelectedItem="{Binding GeolocationServices.ActiveText}"/>
                        </StackLayout>
                    </Frame>
                    <Frame
                        IsVisible="{Binding DebugLevel, Converter={StaticResource Frame_Converter}}">
                        <!-- Web site caching -->
                        <StackLayout>
                            <Label 
                                IsVisible="{Binding DebugLevel, Converter={StaticResource SwitchSiteCaching_Converter}}"
                                Text="Caching von Websiten."/>
                            <Switch 
                                IsVisible="{Binding DebugLevel, Converter={StaticResource SwitchSiteCaching_Converter}}"
                                IsToggled="{Binding IsSiteCachingOnDisplayValue}"/>
                        </StackLayout>
                    </Frame>
                    <Frame
                        IsVisible="{Binding DebugLevel, Converter={StaticResource Frame_Converter}}">
                        <!-- Logging -->
                        <StackLayout>
                            <Label 
                                IsVisible="{Binding DebugLevel, Converter={StaticResource PickLoggingLevel_Converter}}"
                                Text="Logging level" />
                            <Picker
                                IsVisible="{Binding DebugLevel, Converter={StaticResource PickLoggingLevel_Converter}}"
                                ItemsSource="{Binding LoggingLevels}"
                                SelectedItem="{Binding SelectedLoggingLevel}"/>
                            <Label 
                                IsVisible="{Binding DebugLevel, Converter={StaticResource PickLoggingLevel_Converter}}"
                                Text="Logdatei in externen Pfad schreiben"/>
                            <Switch 
                                IsVisible="{Binding DebugLevel, Converter={StaticResource PickLoggingLevel_Converter}}"
                                IsToggled="{Binding LogToExternalFolderDisplayValue}"
                                IsEnabled="{Binding IsLogToExternalFolderVisible}"/>
                        </StackLayout>
                    </Frame>
                    <Frame
                        IsVisible="{Binding DebugLevel, Converter={StaticResource Frame_Converter}}">
                        <!-- Logging -->
                        <StackLayout>
                            <Label 
                                IsVisible="{Binding DebugLevel, Converter={StaticResource ReportLevel_Converter}}"
                                Text="Verbose error messages" />
                            <Switch
                                IsVisible="{Binding DebugLevel, Converter={StaticResource ReportLevel_Converter}}"
                                IsToggled="{Binding IsReportLevelVerbose}"/>
                        </StackLayout>
                    </Frame>
                    <Frame
                        IsVisible="{Binding DebugLevel, Converter={StaticResource Frame_Converter}}">
                        <!-- Display of parameters -->
                        <StackLayout>
                            <Label 
                                IsVisible="{Binding DebugLevel, Converter={StaticResource ShowDiagnostics_Converter}}"
                                Text="Device Identifier" />
                            <Entry
                                IsVisible="{Binding DebugLevel, Converter={StaticResource ShowDiagnostics_Converter}}"
                                IsEnabled="false"
                                Text="{Binding DeviceIdentifier}"/>
                            <Label 
                                IsVisible="{Binding DebugLevel, Converter={StaticResource ShowDiagnostics_Converter}}"
                                Text="Copri Sitzungkeks"/>
                            <Entry                            
                                IsVisible="{Binding DebugLevel, Converter={StaticResource ShowDiagnostics_Converter}}"
                                IsEnabled="false"
                                Text="{Binding SessionCookie}"/>
                            <Label
                                IsVisible="{Binding DebugLevel, Converter={StaticResource ShowDiagnostics_Converter}}"
                                Text="Interner Pfad (Einstell./ ggf. Logging)"/>
                            <Editor
                                IsVisible="{Binding DebugLevel, Converter={StaticResource ShowDiagnostics_Converter}}"
                                IsEnabled="false"
                                Text="{Binding InternalPath}"/>
                            <Label
                                IsVisible="{Binding DebugLevel, Converter={StaticResource ShowDiagnostics_Converter}}"
                                Text="Externer Pfad (Mock/ ggf. Logging)"/>
                            <Editor
                                IsVisible="{Binding DebugLevel, Converter={StaticResource ShowDiagnostics_Converter}}"
                                IsEnabled="false"
                                Text="{Binding ExternalPath}"/>
                        </StackLayout>
                    </Frame>
                </StackLayout>
            </Frame>
        </ScrollView>
    </ContentPage.Content>
</ContentPage>