import SwiftUI

struct ModelSettingsView: View {
    @ObservedObject var whisperPrompt: WhisperPrompt
    @AppStorage("SelectedLanguage") private var selectedLanguage: String = "en"
    @AppStorage("IsTextFormattingEnabled") private var isTextFormattingEnabled = true
    @AppStorage("RemovePunctuation") private var removePunctuation = false
    @AppStorage("LowercaseTranscription") private var lowercaseTranscription = false
    @AppStorage("IsVADEnabled") private var isVADEnabled = true
    @AppStorage("AppendTrailingSpace") private var appendTrailingSpace = true
    @AppStorage("PrewarmModelOnWake") private var prewarmModelOnWake = true
    @AppStorage("showLiveTextPreview") private var showLiveTextPreview = false
    @State private var customPrompt: String = ""
    @State private var isEditing: Bool = false

    var body: some View {
        Form {
            Section {
                VStack(alignment: .leading, spacing: 8) {
                    if isEditing {
                        TextEditor(text: $customPrompt)
                            .font(.system(size: 12))
                            .frame(minHeight: 40, maxHeight: 80)
                            .fixedSize(horizontal: false, vertical: true)
                            .scrollContentBackground(.hidden)

                        Button("Opslaan") {
                            whisperPrompt.setCustomPrompt(customPrompt, for: selectedLanguage)
                            isEditing = false
                        }
                    } else {
                        Text(whisperPrompt.getLanguagePrompt(for: selectedLanguage))
                            .font(.system(size: 12))
                            .foregroundColor(.secondary)
                            .frame(maxWidth: .infinity, alignment: .leading)

                        Button("Bewerken") {
                            customPrompt = whisperPrompt.getLanguagePrompt(for: selectedLanguage)
                            isEditing = true
                        }
                    }
                }
            } header: {
                HStack(spacing: 4) {
                    Text("Uitvoeropmaak")
                    InfoTip(
                        "Alleen ondersteund voor lokale Whisper-modellen. Anders dan GPT volgen spraakmodellen (Whisper) de stijl van je prompt in plaats van instructies. Gebruik voorbeelden van de gewenste uitvoeropmaak in plaats van opdrachten.",
                        learnMoreURL: "https://cookbook.openai.com/examples/whisper_prompting_guide#comparison-with-gpt-prompting"
                    )
                }
            }

            Section {
                Toggle(isOn: $isTextFormattingEnabled) {
                    HStack(spacing: 4) {
                        Text("Alinea's")
                        InfoTip("Past intelligente tekstopmaak toe om grote tekstblokken in alinea's te splitsen.")
                    }
                }
                .toggleStyle(.switch)

                Toggle(isOn: $removePunctuation) {
                    HStack(spacing: 4) {
                        Text("Leestekens verwijderen")
                        InfoTip("Verwijdert leestekens uit de transcriptie-uitvoer.")
                    }
                }
                .toggleStyle(.switch)

                Toggle(isOn: $lowercaseTranscription) {
                    HStack(spacing: 4) {
                        Text("Kleine letters")
                        InfoTip("Zet de transcriptie-uitvoer om naar kleine letters.")
                    }
                }
                .toggleStyle(.switch)

                FillerWordsSettingsView()
            } header: {
                Text("Transcriptie-opmaak")
            }

            Section {
                Toggle(isOn: $appendTrailingSpace) {
                    HStack(spacing: 4) {
                        Text("Spatie toevoegen na plakken")
                        InfoTip("Voegt een spatie toe na de geplakte transcriptie-uitvoer.")
                    }
                }
                .toggleStyle(.switch)

                Toggle(isOn: $isVADEnabled) {
                    HStack(spacing: 4) {
                        Text("Spraakdetectie (VAD)")
                        InfoTip("Detecteert spraaksegmenten en filtert stilte eruit om de nauwkeurigheid van lokale modellen te verbeteren.")
                    }
                }
                .toggleStyle(.switch)

                Toggle(isOn: $prewarmModelOnWake) {
                    HStack(spacing: 4) {
                        Text("Model voorverwarmen (experimenteel)")
                        InfoTip("Schakel dit in als transcripties met lokale modellen langer duren dan verwacht. Voert bij het starten en ontwaken van de app een stille achtergrondtranscriptie uit om optimalisatie te activeren.")
                    }
                }
                .toggleStyle(.switch)

                Toggle(isOn: $showLiveTextPreview) {
                    HStack(spacing: 4) {
                        Text("Live tekstvoorbeeld tonen")
                        InfoTip("Toont het live transcriptievoorbeeld in de recorder tijdens het spreken. Geldt alleen bij realtime streamingmodellen.")
                    }
                }
                .toggleStyle(.switch)
            } header: {
                Text("Geavanceerd")
            }
        }
        .formStyle(.grouped)
        .scrollContentBackground(.hidden)
        .onChange(of: selectedLanguage) { oldValue, newValue in
            if isEditing {
                customPrompt = whisperPrompt.getLanguagePrompt(for: selectedLanguage)
            }
        }
    }
}
