//
//  ThinkingVerbs.swift
//  Confab
//
//  Fun random verbs for AI thinking/processing states
//
// SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0
// Copyright (C) 2026 Rune Olsen
//
// This file is part of Confab.
//
// Confab is licensed under the PolyForm Noncommercial License 1.0.0.
// You may use, study, modify, and share it for any noncommercial
// purpose. Commercial use — including selling Confab or any part of
// it, standalone or bundled into another product or service —
// requires a separate commercial license from the copyright holder.
//
// See the LICENSE file or
// <https://polyformproject.org/licenses/noncommercial/1.0.0> for
// the full license text. For commercial licensing, contact Rune
// Olsen via <https://confab.no>.


import Foundation

/// Marked `nonisolated` at the type level (not per-member) since this project builds with
/// `-default-isolation=MainActor` — without it, every member (including the static `let` verb
/// arrays) defaults to MainActor-isolated, which then conflicts with `nonisolated` funcs trying
/// to reference them. See CLAUDE.md's Swift 6 Compatibility section / MEMORY.md's Common Gotchas.
nonisolated struct ThinkingVerbs {
    /// Get a random thinking verb with ellipsis, in the app's active display language.
    /// Each language has its own hand-written set (not a translation of the English one) —
    /// literal translations of English wordplay ("Waking up the hamsters") often land flat
    /// or sound plain odd in another language, so every list was written to be funny/natural
    /// on its own terms while covering the same rough categories (classic, technical, mystical,
    /// quirky, etc).
    static func random() -> String {
        verbs(for: currentLanguageCode).randomElement()! + "..."
    }

    /// Mirrors how Text()/String(localized:) resolve the active language: the first of the
    /// user's preferred languages that this bundle actually ships a localization for (falls
    /// back to English otherwise). See CLAUDE.md's supported-language list (en, nb, sv, da, de, fr).
    private static var currentLanguageCode: String {
        Bundle.main.preferredLocalizations.first ?? "en"
    }

    /// Internal (not private) so tests can verify the language→list mapping without depending
    /// on Bundle.main's runtime localization state.
    static func verbs(for languageCode: String) -> [String] {
        switch languageCode {
        case "nb": return nbVerbs
        case "sv": return svVerbs
        case "da": return daVerbs
        case "de": return deVerbs
        case "fr": return frVerbs
        default: return enVerbs
        }
    }

    // MARK: - English

    private static let enVerbs = [
        // Classic thinking
        "Thinking",
        "Pondering",
        "Contemplating",
        "Deliberating",
        "Musing",
        "Reflecting",
        "Meditating",

        // Fancy/sophisticated
        "Cogitating",
        "Ruminating",
        "Cerebrating",
        "Ratiocinating",
        "Percolating",

        // Technical/AI themed
        "Computing",
        "Processing",
        "Analyzing",
        "Synthesizing",
        "Calculating",
        "Inferring",
        "Deducing",
        "Compiling thoughts",
        "Running algorithms",
        "Crunching data",
        "Parsing neurons",

        // Creative/playful
        "Daydreaming",
        "Brainstorming",
        "Mind-melding",
        "Noodling",
        "Brewing ideas",
        "Cooking up thoughts",
        "Marinating",
        "Percolating wisdom",
        "Spinning neurons",
        "Warming up the ol' noggin",

        // Mystical/fun
        "Channeling wisdom",
        "Consulting the oracle",
        "Reading the tea leaves",
        "Summoning knowledge",
        "Conjuring responses",
        "Casting neural nets",
        "Divining answers",
        "Communing with silicon",

        // Quirky/silly
        "Doing the thing",
        "Making magic",
        "Activating brain cells",
        "Flexing neurons",
        "Warming up transistors",
        "Revving up synapses",
        "Tickling the cortex",
        "Waking up the hamsters",
        "Consulting the void",
        "Asking the magic 8-ball",

        // Self-aware/meta
        "Pretending to think",
        "Looking busy",
        "Stalling for time",
        "Counting sheep",
        "Twiddling thumbs",
        "Organizing thoughts",
        "Finding the right words",

        // Speed variations
        "Thinking really hard",
        "Quick-thinking",
        "Deep thinking",
        "Speed-thinking",
        "Hyper-thinking",

        // Action-oriented
        "Crafting",
        "Weaving words",
        "Assembling thoughts",
        "Constructing responses",
        "Formulating ideas",
        "Orchestrating neurons",
        "Choreographing bits",

        // Whimsical
        "Having an epiphany",
        "Connecting the dots",
        "Following the thread",
        "Chasing thoughts",
        "Herding ideas",
        "Untangling neurons",

        // Time-based
        "Taking a moment",
        "Pausing thoughtfully",
        "Taking a beat",
        "Gathering thoughts",
        "Catching my breath",
        "Taking five",

        // Just plain weird
        "Beep boop computing",
        "Engaging brain mode",
        "Activating smartness",
        "Downloading thoughts",
        "Buffering intelligence",
        "Loading brilliance",
        "Unfurling wisdom"
    ]

    // MARK: - Norwegian Bokmål

    private static let nbVerbs = [
        // Classic thinking
        "Tenker",
        "Grunner",
        "Fundere",
        "Reflekterer",
        "Mediterer",
        "Spekulerer",
        "Overveier",

        // Fancy/sophisticated
        "Kontemplerer",
        "Filosoferer",
        "Resonnerer",
        "Analyserer dypt",
        "Bryner hjernen",

        // Technical/AI themed
        "Beregner",
        "Prosesserer",
        "Analyserer",
        "Syntetiserer",
        "Kalkulerer",
        "Utleder",
        "Kompilerer tanker",
        "Kjører algoritmer",
        "Knuser data",
        "Parser nevroner",

        // Creative/playful
        "Dagdrømmer",
        "Idémyldrer",
        "Koker sammen tanker",
        "Rører i tankegryta",
        "Lar det godgjøre seg",
        "Spinner nevroner",
        "Varmer opp knollen",
        "Klekker ut idéer",

        // Mystical/fun
        "Rådfører orakelet",
        "Leser kaffegrut",
        "Maner frem visdom",
        "Trollbinder et svar",
        "Kaster nevrale garn",
        "Spår svaret",

        // Quirky/silly
        "Gjør greia",
        "Trylle frem et svar",
        "Aktiverer hjerneceller",
        "Bøyer nevronene",
        "Varmer opp transistorene",
        "Rever opp synapsene",
        "Kiler hjernebarken",
        "Vekker hamsterne",
        "Rådfører tomrommet",
        "Spør den magiske 8-ballen",

        // Self-aware/meta
        "Later som om jeg tenker",
        "Ser opptatt ut",
        "Trekker ut tiden",
        "Teller sauer",
        "Tvinner tomlene",
        "Ordner tankene",
        "Leter etter riktige ord",

        // Speed variations
        "Tenker fort",
        "Lynraskt tankearbeid",
        "Dyptenkende",
        "Hypertenker",

        // Action-oriented
        "Snekrer sammen et svar",
        "Vever ord",
        "Setter sammen tanker",
        "Konstruerer svar",
        "Formulerer idéer",
        "Dirigerer nevroner",
        "Koreograferer bits",

        // Whimsical
        "Får en åpenbaring",
        "Kobler prikkene",
        "Følger tråden",
        "Jager tanker",
        "Gjeter idéer",
        "Reder ut nevronfloken",

        // Time-based
        "Tar en tenkepause",
        "Puster rolig",
        "Tar fem",
        "Samler tankene",
        "Henter pusten",

        // Just plain weird
        "Piper og beregner",
        "Aktiverer hjernemodus",
        "Slår på smartheten",
        "Laster ned tanker",
        "Bufrer intelligens",
        "Laster inn genialitet",
        "Folder ut visdom",
        "Roter i idébanken",
        "Sorterer tankene",
        "Venter på et lyn av genialitet",
        "Plager hjernen med det",
        "Kokende av idéer",
        "Grubler høyt",
        "Filosoferer over saken"
    ]

    // MARK: - Swedish

    private static let svVerbs = [
        // Classic thinking
        "Tänker",
        "Funderar",
        "Grubblar",
        "Reflekterar",
        "Mediterar",
        "Spekulerar",
        "Överväger",

        // Fancy/sophisticated
        "Kontemplerar",
        "Filosoferar",
        "Resonerar",
        "Djupanalyserar",
        "Vässar hjärnan",

        // Technical/AI themed
        "Beräknar",
        "Processar",
        "Analyserar",
        "Syntetiserar",
        "Kalkylerar",
        "Härleder",
        "Kompilerar tankar",
        "Kör algoritmer",
        "Mosar data",
        "Parsar nervceller",

        // Creative/playful
        "Dagdrömmer",
        "Idékläcker",
        "Kokar ihop tankar",
        "Rör i tankegrytan",
        "Låter det mogna",
        "Snurrar nervceller",
        "Värmer upp knoppen",
        "Ruvar på idéer",

        // Mystical/fun
        "Rådfrågar oraklet",
        "Läser i kaffesumpen",
        "Frammanar visdom",
        "Trollbinder ett svar",
        "Kastar neurala nät",
        "Spår svaret",

        // Quirky/silly
        "Gör grejen",
        "Trollar fram ett svar",
        "Aktiverar hjärnceller",
        "Böjer nervcellerna",
        "Värmer upp transistorerna",
        "Varvar upp synapserna",
        "Kittlar hjärnbarken",
        "Väcker hamstrarna",
        "Rådfrågar tomrummet",
        "Frågar magiska åttan",

        // Self-aware/meta
        "Låtsas tänka",
        "Ser upptagen ut",
        "Drar ut på tiden",
        "Räknar får",
        "Tvinnar tummarna",
        "Ordnar tankarna",
        "Letar rätt ord",

        // Speed variations
        "Tänker snabbt",
        "Blixtsnabb tankeverksamhet",
        "Djuptänkande",
        "Hypertänker",

        // Action-oriented
        "Snickrar ihop ett svar",
        "Väver ord",
        "Sätter ihop tankar",
        "Konstruerar svar",
        "Formulerar idéer",
        "Dirigerar nervceller",
        "Koreograferar bitar",

        // Whimsical
        "Får en aha-upplevelse",
        "Kopplar ihop punkterna",
        "Följer tråden",
        "Jagar tankar",
        "Vallar idéer",
        "Reder ut nervtrasslet",

        // Time-based
        "Tar en tankepaus",
        "Andas lugnt",
        "Tar fem",
        "Samlar tankarna",
        "Hämtar andan",

        // Just plain weird
        "Piper och beräknar",
        "Aktiverar hjärnläge",
        "Slår på smartheten",
        "Laddar ner tankar",
        "Buffrar intelligens",
        "Laddar in briljans",
        "Vecklar ut visdom",
        "Rotar i idébanken",
        "Sorterar tankarna",
        "Väntar på ett geniblixt",
        "Bryr hjärnan med det",
        "Kokar av idéer",
        "Grubblar högt",
        "Filosoferar över saken"
    ]

    // MARK: - Danish

    private static let daVerbs = [
        // Classic thinking
        "Tænker",
        "Grunder",
        "Grubler",
        "Reflekterer",
        "Mediterer",
        "Spekulerer",
        "Overvejer",

        // Fancy/sophisticated
        "Kontemplerer",
        "Filosoferer",
        "Ræsonnerer",
        "Dybdeanalyserer",
        "Skærper hjernen",

        // Technical/AI themed
        "Beregner",
        "Processerer",
        "Analyserer",
        "Syntetiserer",
        "Kalkulerer",
        "Udleder",
        "Kompilerer tanker",
        "Kører algoritmer",
        "Knuser data",
        "Parser neuroner",

        // Creative/playful
        "Dagdrømmer",
        "Idémylrer",
        "Koger tanker sammen",
        "Rører i tankegryden",
        "Lader det simre",
        "Snurrer neuroner",
        "Varmer knolden op",
        "Udruger idéer",

        // Mystical/fun
        "Rådspørger orakelet",
        "Læser kaffegrums",
        "Fremmaner visdom",
        "Tryller et svar frem",
        "Kaster neurale net",
        "Spår svaret",

        // Quirky/silly
        "Gør tingen",
        "Trylle-fremkalder et svar",
        "Aktiverer hjerneceller",
        "Bøjer neuronerne",
        "Varmer transistorerne op",
        "Ruller synapserne op",
        "Kilder hjernebarken",
        "Vækker hamsterne",
        "Rådspørger tomrummet",
        "Spørger den magiske 8-tal",

        // Self-aware/meta
        "Lader som om jeg tænker",
        "Ser optaget ud",
        "Trækker tiden ud",
        "Tæller får",
        "Snor tommelfingrene",
        "Ordner tankerne",
        "Leder efter de rette ord",

        // Speed variations
        "Tænker hurtigt",
        "Lynhurtig tænkning",
        "Dybttænkende",
        "Hypertænker",

        // Action-oriented
        "Snedkererer et svar",
        "Væver ord",
        "Samler tanker",
        "Konstruerer svar",
        "Formulerer idéer",
        "Dirigerer neuroner",
        "Koreograferer bits",

        // Whimsical
        "Får en åbenbaring",
        "Forbinder prikkerne",
        "Følger tråden",
        "Jagter tanker",
        "Vogter idéer",
        "Reder neurontrådene ud",

        // Time-based
        "Tager en tænkepause",
        "Trækker vejret roligt",
        "Tager fem",
        "Samler tankerne",
        "Henter vejret",

        // Just plain weird
        "Bipper og beregner",
        "Aktiverer hjernemodus",
        "Tænder for kløgt",
        "Downloader tanker",
        "Bufrer intelligens",
        "Indlæser genialitet",
        "Folder visdom ud",
        "Roder i idébanken",
        "Sorterer tankerne",
        "Venter på et lyn af genialitet",
        "Plager hjernen med det",
        "Kogende af idéer",
        "Grunder højt",
        "Filosoferer over sagen"
    ]

    // MARK: - German

    private static let deVerbs = [
        // Classic thinking
        "Denkt nach",
        "Grübelt",
        "Sinniert",
        "Reflektiert",
        "Meditiert",
        "Spekuliert",
        "Überlegt",

        // Fancy/sophisticated
        "Kontempliert",
        "Philosophiert",
        "Räsoniert",
        "Analysiert tiefgründig",
        "Schärft das Denkvermögen",

        // Technical/AI themed
        "Berechnet",
        "Verarbeitet",
        "Analysiert",
        "Synthetisiert",
        "Kalkuliert",
        "Leitet ab",
        "Kompiliert Gedanken",
        "Lässt Algorithmen laufen",
        "Zermalmt Daten",
        "Parst Neuronen",

        // Creative/playful
        "Tagträumt",
        "Brainstormt",
        "Braut Gedanken zusammen",
        "Rührt im Gedankentopf",
        "Lässt es köcheln",
        "Dreht Neuronen",
        "Wärmt die Denkerstube auf",
        "Brütet Ideen aus",

        // Mystical/fun
        "Befragt das Orakel",
        "Liest im Kaffeesatz",
        "Beschwört Weisheit",
        "Zaubert eine Antwort",
        "Wirft neuronale Netze aus",
        "Weissagt die Antwort",

        // Quirky/silly
        "Macht sein Ding",
        "Zaubert eine Antwort herbei",
        "Aktiviert Gehirnzellen",
        "Biegt Neuronen",
        "Wärmt die Transistoren auf",
        "Dreht die Synapsen hoch",
        "Kitzelt die Großhirnrinde",
        "Weckt die Hamster",
        "Befragt die Leere",
        "Fragt die magische Kugel",

        // Self-aware/meta
        "Tut nur so, als würde es denken",
        "Sieht beschäftigt aus",
        "Zieht Zeit",
        "Zählt Schafe",
        "Dreht Däumchen",
        "Ordnet die Gedanken",
        "Sucht die richtigen Worte",

        // Speed variations
        "Denkt schnell",
        "Blitzschnelles Denken",
        "Tiefes Nachdenken",
        "Hyperdenken",

        // Action-oriented
        "Zimmert eine Antwort",
        "Webt Worte",
        "Fügt Gedanken zusammen",
        "Konstruiert Antworten",
        "Formuliert Ideen",
        "Dirigiert Neuronen",
        "Choreografiert Bits",

        // Whimsical
        "Hat eine Eingebung",
        "Verbindet die Punkte",
        "Folgt dem roten Faden",
        "Jagt Gedanken",
        "Hütet Ideen",
        "Entwirrt die Neuronen",

        // Time-based
        "Nimmt sich einen Moment",
        "Atmet tief durch",
        "Macht kurz Pause",
        "Sammelt die Gedanken",
        "Holt Luft",

        // Just plain weird
        "Piept und rechnet",
        "Aktiviert den Gehirnmodus",
        "Schaltet auf Schlaumodus",
        "Lädt Gedanken herunter",
        "Puffert Intelligenz",
        "Lädt Genialität",
        "Entfaltet Weisheit",
        "Wühlt in der Ideenkiste",
        "Sortiert die Gedanken",
        "Wartet auf einen Geistesblitz",
        "Quält das Gehirn damit",
        "Kocht vor Ideen",
        "Grübelt laut",
        "Philosophiert über die Sache"
    ]

    // MARK: - French

    private static let frVerbs = [
        // Classic thinking
        "Réfléchit",
        "Songe",
        "Médite",
        "Contemple",
        "Spécule",
        "Délibère",
        "Rumine",

        // Fancy/sophisticated
        "Philosophise",
        "Raisonne",
        "Cogite",
        "Analyse en profondeur",
        "Aiguise ses neurones",

        // Technical/AI themed
        "Calcule",
        "Traite",
        "Analyse",
        "Synthétise",
        "Déduit",
        "Compile des pensées",
        "Fait tourner des algorithmes",
        "Broie des données",
        "Parse des neurones",
        "Chiffre les possibilités",

        // Creative/playful
        "Rêvasse",
        "Brainstorme",
        "Mijote des idées",
        "Remue la marmite à idées",
        "Laisse mijoter",
        "Fait tourner ses neurones",
        "Chauffe la matière grise",
        "Couve une idée",

        // Mystical/fun
        "Consulte l'oracle",
        "Lit dans le marc de café",
        "Invoque la sagesse",
        "Conjure une réponse",
        "Lance des filets neuronaux",
        "Prédit la réponse",

        // Quirky/silly
        "Fait son truc",
        "Fait apparaître une réponse par magie",
        "Active ses neurones",
        "Étire ses neurones",
        "Chauffe les transistors",
        "Emballe les synapses",
        "Chatouille le cortex",
        "Réveille les hamsters",
        "Consulte le vide",
        "Interroge la boule magique",

        // Self-aware/meta
        "Fait semblant de réfléchir",
        "A l'air occupé",
        "Fait durer le suspense",
        "Compte les moutons",
        "Se tourne les pouces",
        "Met de l'ordre dans ses pensées",
        "Cherche les mots justes",

        // Speed variations
        "Réfléchit vite",
        "Pensée éclair",
        "Réflexion profonde",
        "Hyper-réflexion",

        // Action-oriented
        "Bricole une réponse",
        "Tisse des mots",
        "Assemble des idées",
        "Construit une réponse",
        "Formule des idées",
        "Dirige ses neurones",
        "Chorégraphie des bits",

        // Whimsical
        "A une révélation",
        "Relie les points",
        "Suit le fil",
        "Traque une pensée",
        "Rassemble ses idées",
        "Démêle ses neurones",

        // Time-based
        "Prend un instant",
        "Respire un grand coup",
        "Fait une pause",
        "Rassemble ses pensées",
        "Reprend son souffle",

        // Just plain weird
        "Bip bip, ça calcule",
        "Active le mode cerveau",
        "Passe en mode intelligent",
        "Télécharge des pensées",
        "Met l'intelligence en cache",
        "Charge du génie",
        "Déploie sa sagesse",
        "Fouille sa boîte à idées",
        "Trie ses pensées",
        "Attend un éclair de génie",
        "Torture son cerveau",
        "Bouillonne d'idées",
        "Rumine à voix haute",
        "Philosophise sur la question"
    ]
}
