import SwiftUI

// MARK: - PrivacyContext

/// Describes the data-sensitivity context for a privacy disclosure badge.
enum PrivacyContext {
    /// General profile data stays on device; AI exception applies.
    case profile
    /// Contact data – local only, never sent to any server.
    case contacts
    /// AI-powered feature – sends data to an external service.
    case aiFeature
    /// Full summary shown at the final onboarding tour step.
    case summary
    /// Strictly local data – no exceptions, no network transfer of any kind.
    case localOnly
}

// MARK: - PrivacyBadgeView

/// Context-aware privacy disclosure badge.
/// Use this wherever data-sensitive actions occur throughout the app.
struct PrivacyBadgeView: View {
    let context: PrivacyContext

    var body: some View {
        HStack(alignment: .top, spacing: 10) {
            Image(systemName: iconName)
                .foregroundStyle(iconColor)
                .font(.subheadline.weight(.semibold))
                .accessibilityHidden(true)

            Text(message)
                .font(.caption)
                .foregroundStyle(.secondary)
                .fixedSize(horizontal: false, vertical: true)
        }
        .padding(12)
        .frame(maxWidth: .infinity, alignment: .leading)
        .background(backgroundColor)
        .clipShape(RoundedRectangle(cornerRadius: 10))
        .accessibilityElement(children: .ignore)
        .accessibilityLabel(accessibilityDescription)
    }

    // MARK: - Style helpers

    private var iconName: String {
        switch context {
        case .profile, .contacts, .summary, .localOnly: "lock.fill"
        case .aiFeature:                                 "info.circle.fill"
        }
    }

    private var iconColor: Color {
        switch context {
        case .profile, .contacts, .summary, .localOnly: .green
        case .aiFeature:                                 .yellow
        }
    }

    private var backgroundColor: Color {
        switch context {
        case .profile, .contacts, .summary, .localOnly: Color.green.opacity(0.1)
        case .aiFeature:                                 Color.yellow.opacity(0.1)
        }
    }

    private var message: LocalizedStringKey {
        switch context {
        case .profile:
            "🔒 Deine Daten bleiben auf deinem iPhone. nahbar speichert nichts in der Cloud – außer wenn du KI-Funktionen verwendest."
        case .contacts:
            "📱 Kontakte werden ausschließlich lokal gespeichert und niemals mit Servern geteilt."
        case .aiFeature:
            "Diese Funktion sendet Daten an einen KI-Dienst. Nur bei KI-Nutzung."
        case .localOnly:
            "🔒 Diese Daten bleiben ausschließlich auf deinem iPhone und werden niemals übertragen."
        case .summary:
            "🔒 Alle deine Daten – Kontakte, Besuche, Vorhaben – bleiben lokal auf deinem iPhone.\nKeine Registrierung. Kein Account. Keine Cloud.\nAusnahme: KI-Funktionen senden anonymisierte Anfragen an einen KI-Dienst."
        }
    }

    private var accessibilityDescription: String {
        switch context {
        case .profile:
            String(localized: "Datenschutzhinweis: Deine Daten bleiben auf deinem iPhone. Keine Cloud-Speicherung außer bei KI-Funktionen.")
        case .contacts:
            String(localized: "Datenschutzhinweis: Kontakte werden ausschließlich lokal gespeichert.")
        case .aiFeature:
            String(localized: "Datenschutzhinweis: Diese Funktion sendet Daten an einen externen KI-Dienst.")
        case .localOnly:
            String(localized: "Datenschutzhinweis: Diese Daten werden ausschließlich lokal auf deinem Gerät gespeichert und niemals übertragen.")
        case .summary:
            String(localized: "Datenschutzzusammenfassung: Alle Daten bleiben lokal auf deinem iPhone. Keine Registrierung, kein Account, keine Cloud. KI-Anfragen werden anonymisiert gesendet.")
        }
    }
}

// MARK: - AIConsentSheet

/// One-time consent sheet shown before the first use of any AI feature.
/// Explains that data will be sent to a third-party service (Anthropic Claude).
/// After the user accepts, `aiConsentGiven` (@AppStorage) is set to `true`
/// so the sheet is never shown again.
struct AIConsentSheet: View {
    /// Called when the user taps "Verstanden, KI verwenden".
    let onAccept: () -> Void

    @Environment(\.dismiss) private var dismiss

    var body: some View {
        VStack(spacing: 0) {
            // ── Handle bar ────────────────────────────────────────────────
            RoundedRectangle(cornerRadius: 2)
                .fill(Color.secondary.opacity(0.35))
                .frame(width: 36, height: 4)
                .padding(.top, 12)

            ScrollView {
                VStack(spacing: 28) {

                    // Icon
                    Image(systemName: "sparkles")
                        .font(.system(size: 56))
                        .foregroundStyle(.yellow)
                        .padding(.top, 24)
                        .accessibilityHidden(true)

                    // Title + body
                    VStack(spacing: 12) {
                        Text("KI-Funktion verwenden?")
                            .font(.title2.bold())
                            .multilineTextAlignment(.center)

                        Text("Diese Funktion überträgt Informationen über die ausgewählte Person an einen externen KI-Dienst (Anthropic Claude). Die Übertragung erfolgt verschlüsselt – aber Daten verlassen dein Gerät.\n\nEs werden übertragen: Vorname, Geburtsjahr (nicht das vollständige Datum), Interessen sowie gespeicherte Momente und Logbucheinträge.\n\nVor dem Versand werden alle Texte automatisch bereinigt: Telefonnummern, E-Mail-Adressen, Links, IBANs und lange Zahlenfolgen werden durch Platzhalter ersetzt.\n\nDu entscheidest jederzeit selbst, ob du KI-Funktionen nutzt. Ohne deine Bestätigung werden keine Daten gesendet.")
                            .font(.body)
                            .foregroundStyle(.secondary)
                            .multilineTextAlignment(.center)
                            .fixedSize(horizontal: false, vertical: true)
                    }
                    .padding(.horizontal, 24)

                    PrivacyBadgeView(context: .aiFeature)
                        .padding(.horizontal, 24)

                    Spacer(minLength: 8)
                }
            }

            // ── Buttons ───────────────────────────────────────────────────
            VStack(spacing: 12) {
                Button {
                    dismiss()
                    onAccept()
                } label: {
                    Text("Verstanden, KI verwenden")
                        .font(.headline)
                        .frame(maxWidth: .infinity)
                        .padding(.vertical, 14)
                        .background(Color.accentColor)
                        .foregroundStyle(.white)
                        .clipShape(RoundedRectangle(cornerRadius: 12))
                }

                Button("Abbrechen") {
                    dismiss()
                }
                .font(.subheadline)
                .foregroundStyle(.secondary)
            }
            .padding(.horizontal, 24)
            .padding(.bottom, 32)
            .padding(.top, 8)
        }
        .presentationDetents([.medium, .large])
        .presentationDragIndicator(.hidden) // we draw our own
    }
}

#Preview {
    ScrollView {
        VStack(spacing: 12) {
            PrivacyBadgeView(context: .profile)
            PrivacyBadgeView(context: .contacts)
            PrivacyBadgeView(context: .aiFeature)
            PrivacyBadgeView(context: .summary)
        }
        .padding()
    }
}

#Preview("AI Consent Sheet") {
    Color.clear
        .sheet(isPresented: .constant(true)) {
            AIConsentSheet { }
        }
}
