import SwiftUI

// MARK: - NahbarInsightStyle

/// Gemeinsames visuelles Sprachsystem für Quiz, Besuchsbewertung und alle
/// datengestützten Empfehlungs-UIs in nahbar.
///
/// Farben sind code-definiert (kein Asset-Catalog nötig) und adaptieren sich
/// automatisch an Light/Dark-Mode via UIColor-Closure.
enum NahbarInsightStyle {

    // MARK: - Farben

    /// Tiefes Petrol – Hauptakzent für Quiz und Empfehlungen.
    /// #2E7D78 in Light Mode, etwas aufgehellt in Dark Mode.
    static let accentPetrol = Color(UIColor { trait in
        trait.userInterfaceStyle == .dark
            ? UIColor(red: 0.28, green: 0.62, blue: 0.59, alpha: 1)
            : UIColor(red: 0.18, green: 0.49, blue: 0.47, alpha: 1)
    })

    /// Gedämpftes Salbeigrün. #6B8B68 in Light Mode.
    static let accentSage = Color(UIColor { trait in
        trait.userInterfaceStyle == .dark
            ? UIColor(red: 0.56, green: 0.70, blue: 0.54, alpha: 1)
            : UIColor(red: 0.42, green: 0.55, blue: 0.41, alpha: 1)
    })

    /// Sanftes Korall für Energie-Akzente.
    static let accentCoral = Color(UIColor { trait in
        trait.userInterfaceStyle == .dark
            ? UIColor(red: 0.95, green: 0.62, blue: 0.54, alpha: 1)
            : UIColor(red: 0.88, green: 0.45, blue: 0.38, alpha: 1)
    })

    /// Hintergrundtönung für "Passend für dich"-Badges (Petrol 15 % Opazität).
    static var recommendedTint: Color { accentPetrol.opacity(0.15) }

    /// Kartenhindergrund – entspricht dem SystemGrau-Hintergrund der VisitRatingCards.
    static let cardBackground = Color(.secondarySystemBackground)

    /// Sekundärtext.
    static let secondaryText = Color.secondary

    // MARK: - Typografie

    /// Situationstext im Quiz. Entspricht .title3.weight(.medium).
    static let situationFont: Font = .title3.weight(.medium)

    /// Antwortoptionen-Text. Entspricht .body.
    static let optionFont: Font = .body

    /// Kleiner Erklärungstext. Entspricht .caption.
    static let captionFont: Font = .caption

    /// Badge-Schrift (RecommendedBadge, TraitLevel-Chips).
    static let badgeFont: Font = .caption2.weight(.semibold)

    // MARK: - Layout

    /// Eckenradius für Quiz-Situationskarten (etwas weicher als Visit-Karten).
    static let cardCornerRadius: CGFloat = 18

    /// Eckenradius für Karten im VisitRating-Stil.
    static let visitCardCornerRadius: CGFloat = 12

    /// Innenabstand von Karten.
    static let cardPadding: CGFloat = 20

    /// Seitenabstand (horizontales Padding).
    static let horizontalPadding: CGFloat = 20

    // MARK: - Fortschritt

    /// Durchmesser der aktiven Fortschritts-Punkte.
    static let progressDotActive: CGFloat = 8

    /// Durchmesser der inaktiven Fortschritts-Punkte.
    static let progressDotInactive: CGFloat = 6

    // MARK: - Transitionen

    /// Folienwechsel-Transition (neue Frage von rechts, alte nach links).
    static let slideTransition: AnyTransition = .asymmetric(
        insertion: .move(edge: .trailing),
        removal: .move(edge: .leading)
    )

    // MARK: - Farb-Mapping nach Dimension

    /// Farbe für eine OCEAN-Dimension im Pentagon-Chart und Badges.
    static func color(for dimension: OceanDimension) -> Color {
        switch dimension {
        case .openness:          return Color(red: 0.25, green: 0.55, blue: 0.85) // blau
        case .conscientiousness: return accentPetrol                               // petrol
        case .extraversion:      return accentCoral                                // korall
        case .agreeableness:     return accentSage                                 // salbei
        case .neuroticism:       return Color(red: 0.60, green: 0.45, blue: 0.80) // lavendel
        }
    }

    // MARK: - TraitLevel-Farbe

    static func color(for level: TraitLevel) -> Color {
        switch level {
        case .low:    return .secondary
        case .medium: return accentSage
        case .high:   return accentPetrol
        }
    }
}
