import {Dispatch, SetStateAction} from "react";
import {VerbalTimeProps} from "@/lib/types/story";

export function getVerbesStyle(verbalTimeValue: number, level: number): VerbalTimeProps {
    switch (verbalTimeValue) {
        case 1:
            return {
                actions: level === 1 ? 'Passé composé' : 'Passé simple',
                descriptions: 'Imparfait',
                dialogues: 'Passé composé',
                thoughts: level === 3 ? 'Subjonctif imparfait' : 'Plus-que-parfait',
                summary: '→ Narrations épurées, style classique',
            };
        case 2:
            return {
                actions: 'Passé composé',
                descriptions: level === 1 ? 'Imparfait' : level === 2 ? 'Imparfait + infinitifs' : 'Conditionnel présent',
                dialogues: level === 1 ? 'Présent' : level === 2 ? 'Présent + impératif' : 'Impératif',
                thoughts: level === 1 ? 'Futur proche' : level === 2 ? 'Conditionnel présent' : 'Subjonctif présent',
                summary: '→ Témoignages, récits autobiographiques',
            };
        case 3:
            return {
                actions: level === 1 ? 'Plus-que-parfait' : 'Passé antérieur',
                descriptions: level === 1 ? 'Imparfait' : level === 2 ? 'Plus-que-parfait' : 'Conditionnel passé',
                dialogues: level === 3 ? 'Passé antérieur' : 'Passé simple',
                thoughts: level === 1 ? 'Plus-que-parfait' : 'Subjonctif imparfait',
                summary: '→ Flashbacks littéraires, tragédies',
            };
        case 4:
            return {
                actions: level === 1 ? 'Présent simple' : level === 2 ? 'Présent' : 'Présent + participe présent',
                descriptions: level === 1 ? 'Participe présent' : level === 2 ? 'Participe présent + infinitifs' : 'Participes présents enchaînés',
                dialogues: level === 1 ? 'Présent' : level === 2 ? 'Impératif' : 'Impératif + infinitifs',
                thoughts: level === 1 ? 'Futur proche' : level === 2 ? 'Futur simple' : 'Futur antérieur',
                summary: '→ Urgence, immersion totale',
            };
        case 5:
            return {
                actions: 'Présent',
                descriptions: level === 1 ? 'Gérondif' : level === 2 ? 'Gérondif + infinitifs' : 'Gérondif + conditionnel',
                dialogues: level === 1 ? 'Présent' : level === 2 ? 'Conditionnel présent' : 'Infinitif',
                thoughts: level === 1 ? 'Infinitif' : 'Infinitif passé',
                summary: '→ Méditations philosophiques',
            };
        case 6:
            return {
                actions: level === 1 ? 'Futur simple' : 'Futur antérieur',
                descriptions: level === 1 ? 'Futur proche' : level === 2 ? 'Futur antérieur' : 'Futur antérieur',
                dialogues: level === 1 ? 'Futur simple' : 'Futur proche',
                thoughts: level === 1 ? 'Futur proche' : 'Futur antérieur',
                summary: '→ Prophéties, plans stratégiques',
            };
        case 7:
            return {
                actions: level === 1 ? 'Futur simple' : 'Futur antérieur',
                descriptions: level === 1 ? 'Futur proche' : level === 2 ? 'Futur simple + conditionnel' : 'Conditionnel passé',
                dialogues: level === 1 ? 'Futur proche' : level === 2 ? 'Futur antérieur' : 'Futur simple',
                thoughts: level === 1 ? 'Futur simple' : level === 2 ? 'Conditionnel passé' : 'Futur antérieur',
                summary: '→ Dystopies, récits post-apocalyptiques',
            };
        case 8:
            return {
                actions: 'Imparfait',
                descriptions: level === 1 ? 'Imparfait' : level === 2 ? 'Conditionnel présent' : 'Conditionnel passé',
                dialogues: level === 1 ? 'Présent' : level === 2 ? 'Infinitif' : 'Infinitifs',
                thoughts: level === 1 ? 'Subjonctif présent' : level === 2 ? 'Subjonctif imparfait' : 'Subjonctif imparfait',
                summary: '→ Rêves, souvenirs déformés',
            };
        case 9:
            return {
                actions: 'Conditionnel présent',
                descriptions: 'Conditionnel passé',
                dialogues: 'Subjonctif imparfait',
                thoughts: level === 3 ? 'Subjonctif imparfait' : 'Plus-que-parfait',
                summary: '→ Uchronies, réalités alternatives',
            };
        case 10:
            return {
                actions: level === 1 ? 'Subjonctif présent' : 'Subjonctif imparfait',
                descriptions: level === 1 ? 'Subjonctif présent' : 'Subjonctif imparfait',
                dialogues: 'Impératif',
                thoughts: level === 3 ? 'Subjonctif imparfait' : 'Conditionnel passé',
                summary: '→ Drames psychologiques, dilemmes',
            };
        case 11:
            return {
                actions: 'Passé composé',
                descriptions: 'Imparfait',
                dialogues: 'Plus-que-parfait',
                thoughts: 'Infinitif passé',
                summary: '→ Regrets, introspection nostalgique',
            };
        case 12:
            return {
                actions: 'Présent',
                descriptions: level === 1 ? 'Passé composé' : 'Passé composé + futur antérieur',
                dialogues: level === 1 ? 'Futur proche' : 'Futur antérieur',
                thoughts: 'Participe présent',
                summary: '→ Crise en cours, compte à rebours',
            };
        case 13:
            return {
                actions: level === 1 ? 'Présent simple' : level === 2 ? 'Présent + participe présent' : 'Participes présents enchaînés',
                descriptions: level === 1 ? 'Imparfait' : level === 2 ? 'Participe présent + adjectifs' : 'Subjonctif présent',
                dialogues: level === 1 ? 'Présent' : level === 2 ? 'Conditionnel présent' : 'Subjonctif présent',
                thoughts: level === 1 ? 'Infinitif' : level === 2 ? 'Infinitif passé' : 'Subjonctif imparfait',
                summary: '→ Émotions intenses, introspections vives (romances, drames psychologiques)',
            };
        case 14:
            return {
                actions: 'Présent',
                descriptions: level === 1 ? 'Gérondif' : level === 2 ? 'Gérondif + infinitifs' : 'Conditionnel présent',
                dialogues: level === 1 ? 'Présent' : level === 2 ? 'Impératif' : 'Infinitif',
                thoughts: level === 1 ? 'Infinitif' : level === 2 ? 'Infinitif passé' : 'Subjonctif imparfait',
                summary: '→ Réflexions profondes, analyse des émotions (nouvelles philosophiques, récits introspectifs)',
            };
        case 15:
            return {
                actions: level === 1 ? 'Présent simple' : level === 2 ? 'Présent + passé simple' : 'Présent + passé antérieur',
                descriptions: level === 1 ? 'Imparfait' : level === 2 ? 'Passé composé' : 'Conditionnel passé',
                dialogues: level === 1 ? 'Présent' : level === 2 ? 'Passé simple' : 'Futur antérieur',
                thoughts: level === 1 ? 'Infinitif' : level === 2 ? 'Plus-que-parfait' : 'Subjonctif imparfait',
                summary: '→ Histoires historiques avec une intensité immédiate (batailles, moments décisifs)',
            };
        case 16:
            return {
                actions: level === 1 ? 'Passé composé' : level === 2 ? 'Imparfait + passé simple' : 'Plus-que-parfait',
                descriptions: level === 1 ? 'Imparfait' : level === 2 ? 'Participe passé' : 'Conditionnel passé',
                dialogues: level === 1 ? 'Présent' : level === 2 ? 'Imparfait' : 'Subjonctif imparfait',
                thoughts: level === 1 ? 'Infinitif' : level === 2 ? 'Infinitif passé' : 'Subjonctif présent',
                summary: '→ Récits introspectifs, auto-analyse (autofictions, récits de croissance personnelle)',
            };
        case 17:
            return {
                actions: level === 1 ? 'Futur simple' : level === 2 ? 'Futur antérieur' : 'Conditionnel passé',
                descriptions: level === 1 ? 'Futur proche' : level === 2 ? 'Futur antérieur' : 'Conditionnel présent',
                dialogues: level === 1 ? 'Futur simple' : level === 2 ? 'Futur antérieur' : 'Subjonctif présent',
                thoughts: level === 1 ? 'Infinitif' : level === 2 ? 'Futur antérieur' : 'Conditionnel passé',
                summary: '→ Prophéties, visions apocalyptiques (récits mystiques, romans de science-fiction)',
            };
        case 18:
            return {
                actions: level === 1 ? 'Conditionnel présent' : level === 2 ? 'Conditionnel passé' : 'Subjonctif imparfait',
                descriptions: level === 1 ? 'Conditionnel présent' : level === 2 ? 'Conditionnel passé' : 'Subjonctif présent',
                dialogues: level === 1 ? 'Conditionnel présent' : level === 2 ? 'Subjonctif imparfait' : 'Impératif',
                thoughts: level === 1 ? 'Infinitif' : level === 2 ? 'Infinitif passé' : 'Subjonctif imparfait',
                summary: '→ Mondes parallèles, uchronies (romans alternatifs, récits de fantasy)',
            };
        case 19:
            return {
                actions: level === 1 ? 'Imparfait' : level === 2 ? 'Imparfait + participe présent' : 'Participes présents enchaînés',
                descriptions: level === 1 ? 'Imparfait' : level === 2 ? 'Participe présent + adjectifs' : 'Subjonctif présent',
                dialogues: level === 1 ? 'Présent' : level === 2 ? 'Imparfait' : 'Subjonctif imparfait',
                thoughts: level === 1 ? 'Infinitif' : level === 2 ? 'Infinitif passé' : 'Subjonctif présent',
                summary: '→ Lyrisme, poésie narrative (récits oniriques, nouvelles littéraires)',
            };
        case 20:
            return {
                actions: level === 1 ? 'Présent simple' : level === 2 ? 'Imparfait' : 'Futur simple',
                descriptions: level === 1 ? 'Imparfait' : level === 2 ? 'Participe présent' : 'Conditionnel présent',
                dialogues: level === 1 ? 'Présent' : level === 2 ? 'Imparfait' : 'Futur proche',
                thoughts: level === 1 ? 'Infinitif' : level === 2 ? 'Plus-que-parfait' : 'Subjonctif présent',
                summary: '→ Immersion totale (récits interactifs, jeux de rôle, romans à choix multiples)',
            };
        default:
            return {
                actions: 'Passé simple',
                descriptions: 'Imparfait',
                dialogues: 'Passé composé',
                thoughts: 'Plus-que-parfait',
                summary: '→ Narrations épurées, style classique',
            };
    }
}

export function presetStoryType(
    presetType: string,
    setTone: Dispatch<SetStateAction<string>>,
    setAtmosphere: Dispatch<SetStateAction<string>>,
    setVerbTense: Dispatch<SetStateAction<string>>,
    setPerson: Dispatch<SetStateAction<string>>,
    setDialogueType: Dispatch<SetStateAction<string>>,
    setIsExplicit: Dispatch<SetStateAction<boolean>>,
): void {
    switch (presetType) {
        case '1':
            setTone('Suspense angoissant, mystère troublant');
            setAtmosphere('Tension oppressante, ombres menaçantes');
            setVerbTense('3');
            setPerson('1');
            setDialogueType('3');
            setIsExplicit(false);
            break;
        case '2':
            setTone('Brutalité crue, terreur psychologique');
            setAtmosphere('Claustrophobie, clair-obscur sinistre');
            setVerbTense('10');
            setPerson('4');
            setDialogueType('4');
            setIsExplicit(true);
            break;
        case '3':
            setTone('Magie envoûtante, innocence poétique');
            setAtmosphere('Forêt luminescente, brume enchantée');
            setVerbTense('19');
            setPerson('3');
            setDialogueType('1');
            setIsExplicit(false);
            break;
        case '4':
            setTone('Froidure technologique, désespoir systémique');
            setAtmosphere('Métal rouillé, lumières néon vacillantes');
            setVerbTense('7');
            setPerson('5');
            setDialogueType('3');
            setIsExplicit(false);
            break;
        case '5':
            setTone('Passion tourmentée, mélancolie sensuelle');
            setAtmosphere('Pluie fine, chambres aux rideaux lourds');
            setVerbTense('13');
            setPerson('1');
            setDialogueType('1');
            setIsExplicit(true);
            break;
        case '6':
            setTone('Héroïsme grandiose, dangers exaltants');
            setAtmosphere('Vastes paysages, ruines anciennes');
            setVerbTense('4');
            setPerson('6');
            setDialogueType('3');
            setIsExplicit(false);
            break;
        case '7':
            setTone('Méditation existentielle, questions sans réponses');
            setAtmosphere('Bibliothèque poussiéreuse, nuit silencieuse');
            setVerbTense('5');
            setPerson('5');
            setDialogueType('4');
            setIsExplicit(true);
            break;
        case '8':
            setTone('Tension psychologique, suspense mental');
            setAtmosphere('Isolation, paranoïa croissante');
            setVerbTense('10');
            setPerson('4');
            setDialogueType('4');
            setIsExplicit(true);
            break;
        case '9':
            setTone('Mystère obscur, surnaturel inquiétant');
            setAtmosphere('Forêts sombres, créatures cachées');
            setVerbTense('3');
            setPerson('1');
            setDialogueType('3');
            setIsExplicit(false);
            break;
        case '10':
            setTone('Amour interdit, passion à travers les âges');
            setAtmosphere('Châteaux majestueux, bals somptueux');
            setVerbTense('1');
            setPerson('3');
            setDialogueType('1');
            setIsExplicit(true);
            break;
        case '11':
            setTone('Dure réalité, enquête sombre');
            setAtmosphere('Rues sombres, ambiance de crime');
            setVerbTense('16');
            setPerson('5');
            setDialogueType('4');
            setIsExplicit(true);
            break;
        case '12':
            setTone('Espoir futuriste, société idéale');
            setAtmosphere('Villes lumineuses, technologie avancée');
            setVerbTense('6');
            setPerson('4');
            setDialogueType('3');
            setIsExplicit(false);
            break;
        case '13':
            setTone('Magie contemporaine, réalisme enchanté');
            setAtmosphere('Ville moderne, éléments féeriques');
            setVerbTense('4');
            setPerson('1');
            setDialogueType('1');
            setIsExplicit(true);
            break;
        case '14':
            setTone('Conflits émotionnels, relations complexes');
            setAtmosphere('Intérieur chaleureux, tensions sous-jacentes');
            setVerbTense('13');
            setPerson('1');
            setDialogueType('1');
            setIsExplicit(true);
            break;
        case '15':
            setTone('Exploration audacieuse, dangers marins');
            setAtmosphere('Océan infini, navires anciens');
            setVerbTense('4');
            setPerson('6');
            setDialogueType('3');
            setIsExplicit(false);
            break;
        case '16':
            setTone('Quête héroïque, magie puissante');
            setAtmosphere('Mondes imaginaires, créatures mythiques');
            setVerbTense('19');
            setPerson('3');
            setDialogueType('1');
            setIsExplicit(true);
            break;
        case '17':
            setTone('Amour moderne, relations actuelles');
            setAtmosphere('Ville animée, cafés cosy');
            setVerbTense('13');
            setPerson('1');
            setDialogueType('1');
            setIsExplicit(true);
            break;
        case '18':
            setTone("Intrigue internationale, secrets d'État");
            setAtmosphere('Villes étrangères, tensions diplomatiques');
            setVerbTense('16');
            setPerson('5');
            setDialogueType('4');
            setIsExplicit(true);
            break;
        case '19':
            setTone('Survie désespérée, monde en ruines');
            setAtmosphere('Paysages dévastés, ressources rares');
            setVerbTense('7');
            setPerson('4');
            setDialogueType('3');
            setIsExplicit(false);
            break;
        case '20':
            setTone('Leçons de vie, valeurs profondes');
            setAtmosphere('Village paisible, nature environnante');
            setVerbTense('1');
            setPerson('3');
            setDialogueType('1');
            setIsExplicit(true);
            break;
    }
}

export function getNarrativePerson(value: number, level: number): string {
    if (level === 1) {
        switch (value) {
            case 1:
                return 'Première personne (Je acteur) - Parfait pour les débuts (ex: Je marchais)';
            case 3:
                return 'Troisième omnisciente - Narration globale (ex: Il marchait)';
            default:
                return 'Première personne';
        }
    } else if (level === 2) {
        switch (value) {
            case 1:
                return 'Première personne (Je acteur)';
            case 2:
                return 'Première personne (Je témoin) - Observateur (ex: Je le regardais marcher)';
            case 3:
                return 'Troisième omnisciente';
            case 4:
                return 'Troisième limitée - Focus sur un personnage (ex: Il marchait, ignorant le danger)';
            default:
                return 'Première personne';
        }
    } else if (level === 3) {
        switch (value) {
            case 1:
                return 'Première personne (Je acteur)';
            case 2:
                return 'Première personne (Je témoin)';
            case 3:
                return 'Troisième omnisciente';
            case 4:
                return 'Troisième limitée';
            case 5:
                return 'Deuxième personne (Tu) - Immersion forte (ex: Tu marches vers la mort)';
            case 6:
                return 'Nous collectif - Voix chorale (ex: Nous marchions, unis par le destin)';
            default:
                return 'Troisième omnisciente';
        }
    }
    return 'Première personne';
}

export function getDialogueType(value: number, level: number): string {
    if (level === 1) {
        switch (value) {
            case 1:
                return 'Dialogue direct - Paroles exactes (ex: "Je t\'aime !")';
            case 2:
                return 'Dialogue indirect - Résumé par le narrateur (ex: Il dit qu\'il m\'aime)';
            default:
                return 'Dialogue direct';
        }
    } else if (level === 2) {
        switch (value) {
            case 1:
                return 'Dialogue direct';
            case 2:
                return 'Dialogue indirect';
            case 3:
                return 'Dialogue mixte (ex: "Je t\'aime" dit-il, puis explique ses sentiments)';
            default:
                return 'Dialogue direct';
        }
    } else if (level === 3) {
        switch (value) {
            case 1:
                return 'Dialogue direct';
            case 2:
                return 'Dialogue indirect';
            case 3:
                return 'Dialogue mixte';
            case 4:
                return 'Monologue intérieur (ex: *Je ne peux pas le perdre...*)';
            default:
                return 'Dialogue direct';
        }
    }
    return 'Dialogue direct';
}
