//
// Swiftfin is subject to the terms of the Mozilla Public
// License, v2.0. If a copy of the MPL was not distributed with this
// file, you can obtain one at https://mozilla.org/MPL/2.0/.
//
// Copyright (c) 2024 Jellyfin & Jellyfin Contributors
//

import Defaults
import SwiftUI

// TODO: organize into a better structure
// TODO: add footer descriptions to each explaining the
//       the gesture + why horizontal pan/swipe caveat
// TODO: add page describing each action?

struct GestureSettingsView: View {

    @Default(.VideoPlayer.Gesture.horizontalPanGesture)
    private var horizontalPanGesture
    @Default(.VideoPlayer.Gesture.horizontalSwipeGesture)
    private var horizontalSwipeGesture
    @Default(.VideoPlayer.Gesture.longPressGesture)
    private var longPressGesture
    @Default(.VideoPlayer.Gesture.multiTapGesture)
    private var multiTapGesture
    @Default(.VideoPlayer.Gesture.doubleTouchGesture)
    private var doubleTouchGesture
    @Default(.VideoPlayer.Gesture.pinchGesture)
    private var pinchGesture
    @Default(.VideoPlayer.Gesture.verticalPanGestureLeft)
    private var verticalPanGestureLeft
    @Default(.VideoPlayer.Gesture.verticalPanGestureRight)
    private var verticalPanGestureRight

    var body: some View {
        Form {

            Section {

                CaseIterablePicker("Horizontal Pan", selection: $horizontalPanGesture)
                    .disabled(horizontalSwipeGesture != .none && horizontalPanGesture == .none)

                CaseIterablePicker("Horizontal Swipe", selection: $horizontalSwipeGesture)
                    .disabled(horizontalPanGesture != .none && horizontalSwipeGesture == .none)

                CaseIterablePicker("Long Press", selection: $longPressGesture)

                CaseIterablePicker("Multi Tap", selection: $multiTapGesture)

                CaseIterablePicker("Double Touch", selection: $doubleTouchGesture)

                CaseIterablePicker("Pinch", selection: $pinchGesture)

                CaseIterablePicker("Left Vertical Pan", selection: $verticalPanGestureLeft)

                CaseIterablePicker("Right Vertical Pan", selection: $verticalPanGestureRight)
            }
        }
        .navigationTitle("Gestures")
    }
}
