import {ChapterListProps} from "./Chapter"; import {Act, Issue} from "@/lib/models/Book"; import {RadioBoxValue} from "@/components/form/RadioBox"; import {Dispatch, SetStateAction} from "react"; import {SelectBoxProps} from "@/shared/interface"; export interface StoryProps { mainChapter: ChapterListProps[], acts: Act[], issues: Issue[] } export interface VerbalTimeProps { actions: string; descriptions: string; dialogues: string; thoughts: string; summary: string; } export interface DialogueProps { description: string; example: string; } export interface GeneratedShortStory { title: string; short: string; resume: string; totalPrice: number; totalTokens: number; } export const storyStates: RadioBoxValue[] = [ {label: 'Suite', value: 0}, {label: 'Début', value: 1}, {label: 'Fin', value: 2}, {label: 'Introduction', value: 3}, {label: 'Final', value: 4}, ]; export const beginnerPredefinedType: SelectBoxProps[] = [ { label: `Thème défini disponible.`, value: '0', }, { label: `Féerique`, value: '3', }, { label: 'Romance historique', value: '10', }, { label: 'Conte de fées moderne', value: '13', }, { label: 'Romance contemporaine', value: '17', }, { label: 'Conte moral', value: '20', }, ]; export const intermediatePredefinedType: SelectBoxProps[] = [ { label: `Thème défini disponible.`, value: '0', }, { label: `Histoire d'horreur jeune adulte`, value: '1', }, { label: 'Féerique', value: '3', }, { label: 'Romance dramatique', value: '5', }, { label: 'Fantastique sombre', value: '9', }, { label: 'Romance historique', value: '10', }, { label: 'Science-fiction utopique', value: '12', }, { label: 'Conte de fées moderne', value: '13', }, { label: 'Drame familial', value: '14', }, { label: 'Romance contemporaine', value: '17', }, { label: 'Science-fiction post-apocalyptique', value: '19', }, { label: 'Conte moral', value: '20', }, ]; export const advancedPredefinedType: SelectBoxProps[] = [ { label: `Thème défini disponible.`, value: '0', }, { label: `Histoire d'horreur jeune adulte`, value: '1', }, { label: `Horreur adulte`, value: '2', }, { label: 'Féerique', value: '3', }, { label: 'Science-fiction dystopique', value: '4', }, { label: 'Romance dramatique', value: '5', }, { label: 'Aventure épique', value: '6', }, { label: 'Conte philosophique', value: '7', }, { label: 'Thriller psychologique', value: '8', }, { label: 'Fantastique sombre', value: '9', }, { label: 'Romance historique', value: '10', }, { label: 'Polar noir', value: '11', }, { label: 'Science-fiction utopique', value: '12', }, { label: 'Conte de fées moderne', value: '13', }, { label: 'Drame familial', value: '14', }, { label: 'Aventure maritime', value: '15', }, { label: 'Fantaisie épique', value: '16', }, { label: 'Romance contemporaine', value: '17', }, { label: "Thriller d'espionnage", value: '18', }, { label: 'Science-fiction post-apocalyptique', value: '19', }, { label: 'Conte moral', value: '20', }, ]; // Débutant (Level 1) export const beginnerNarrativePersons: SelectBoxProps[] = [ { label: 'Sélectionner un type narrative.', value: '0', }, { label: 'Première personne (Je acteur) - Implication émotionnelle', value: '1', }, { label: 'Troisième omnisciente - Narration divine, savoir total', value: '3', }, ]; // Intermédiaire (Level 2) export const intermediateNarrativePersons: SelectBoxProps[] = [ { label: 'Sélectionner un type narrative.', value: '0', }, { label: 'Première personne (Je acteur) - Implication émotionnelle', value: '1', }, { label: 'Première personne (Je témoin) - Observation extérieure', value: '2', }, { label: 'Troisième omnisciente - Narration divine, savoir total', value: '3', }, { label: 'Troisième limitée - Focus sur 1 personnage', value: '4', }, ]; // Avancé (Level 3) export const advancedNarrativePersons: SelectBoxProps[] = [ { label: 'Sélectionner un type narrative.', value: '0', }, { label: 'Première personne (Je acteur) - Implication émotionnelle', value: '1', }, { label: 'Première personne (Je témoin) - Observation extérieure', value: '2', }, { label: 'Troisième omnisciente - Narration divine, savoir total', value: '3', }, { label: 'Troisième limitée - Focus sur 1 personnage', value: '4', }, { label: 'Deuxième personne (Tu) - Immersion/confrontation', value: '5', }, { label: 'Nous collectif - Voix chorale, destin partagé', value: '6', }, ]; export const langues: SelectBoxProps[] = [ {label: 'Sélectionner une langue.', value: '0'}, {label: 'Français Canada', value: '1'}, {label: 'Français France', value: '2'}, {label: 'Français Québécois', value: '3'}, {label: 'English Canada', value: '4'}, ]; // Débutant (Level 1) export const beginnerDialogueTypes: SelectBoxProps[] = [ { label: 'Sélectionner un type de dialogue.', value: '0', }, { label: 'Dialogue direct - Paroles exactes des personnages', value: '1', }, { label: 'Dialogue indirect - Paroles résumées par le narrateur', value: '2', }, ]; // Intermédiaire (Level 2) export const intermediateDialogueTypes: SelectBoxProps[] = [ { label: 'Sélectionner un type de dialogue.', value: '0', }, { label: 'Dialogue direct - Paroles exactes des personnages', value: '1', }, { label: 'Dialogue indirect - Paroles résumées par le narrateur', value: '2', }, { label: 'Dialogue mixte - Mélange de dialogue direct et indirect', value: '3', }, ]; // Avancé (Level 3) export const advancedDialogueTypes: SelectBoxProps[] = [ { label: 'Sélectionner un type de dialogue.', value: '0', }, { label: 'Dialogue direct - Paroles exactes des personnages', value: '1', }, { label: 'Dialogue indirect - Paroles résumées par le narrateur', value: '2', }, { label: 'Dialogue mixte - Mélange de dialogue direct et indirect', value: '3', }, { label: 'Monologue intérieur - Interaction avec soi-même', value: '4', }, ]; export const verbalTime: SelectBoxProps[] = [ { label: 'Sélectionner un temps verbal.', value: '0', }, { label: 'Passé Simple', value: '1', }, { label: 'Passé Immédiat → Témoignages, récits autobiographiques', value: '2', }, {label: 'Passé Profond → Flashbacks littéraires, tragédies', value: '3'}, {label: 'Présent Brut → Urgence, immersion totale', value: '4'}, {label: 'Présent Réflexif → Méditations philosophiques', value: '5'}, {label: 'Futur Projeté → Prophéties, plans stratégiques', value: '6'}, { label: 'Futur Catastrophe → Dystopies, récits post-apocalyptiques', value: '7', }, {label: 'Imparfait Onirique → Rêves, souvenirs déformés', value: '8'}, { label: 'Conditionnel Hypothétique → Uchronies, réalités alternatives', value: '9', }, { label: 'Subjonctif Angoissé → Drames psychologiques, dilemmes', value: '10', }, { label: 'Mélancolie Composée → Regrets, introspection nostalgique', value: '11', }, {label: 'Urgence Narrative → Urgences', value: '12'}, {label: 'Présent Émotionnel → Émotions intenses', value: '13'}, { label: 'Présent Introspectif → Réflexions profondes', value: '14', }, { label: 'Présent Historique → Histoires historiques', value: '15', }, { label: 'Passé Réflexif → Récits introspectifs', value: '16', }, { label: 'Futur Prophétique → Prophéties, visions apocalyptiques', value: '17', }, { label: 'Conditionnel Visionnaire → Mondes parallèles', value: '18', }, { label: 'Imparfait Poétique → Lyrisme, poésie narrative', value: '19', }, { label: 'Second Person Narrative → Immersion totale', value: '20', }, ]; export default class Story { constructor() { } static getVerbesStyle( verbalTimeValue: number, level: number, ): VerbalTimeProps { switch (verbalTimeValue) { case 1: // Passé Simple 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: // Passé Immédiat 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: // Passé Profond 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', // <--- CORRIGÉ thoughts: level === 1 ? 'Plus-que-parfait' : 'Subjonctif imparfait', summary: '→ Flashbacks littéraires, tragédies', }; case 4: // Présent Brut 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: // Présent Réflexif 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 13: // Présent Émotionnel 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: // Présent Introspectif 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: // Présent Historique 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 6: // Futur Projeté 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: // Futur Catastrophe 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: // Imparfait Onirique 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: // Conditionnel Hypothétique return { actions: 'Conditionnel présent', descriptions: 'Conditionnel passé', dialogues: level === 1 ? 'Subjonctif imparfait' : 'Subjonctif imparfait', // <--- MÊME POUR TOUTES LES NIVEAUX thoughts: level === 3 ? 'Subjonctif imparfait' : 'Plus-que-parfait', // <--- AJOUTÉ summary: '→ Uchronies, réalités alternatives', }; case 10: // Subjonctif Angoissé 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é', // <--- AJOUTÉ summary: '→ Drames psychologiques, dilemmes', }; case 11: // Mélancolie Composée return { actions: 'Passé composé', descriptions: 'Imparfait', dialogues: 'Plus-que-parfait', thoughts: 'Infinitif passé', summary: '→ Regrets, introspection nostalgique', }; case 12: // Urgence Narrative return { actions: 'Présent', descriptions: level === 1 ? 'Passé composé' : 'Passé composé + futur antérieur', // <--- AJOUTÉ dialogues: level === 1 ? 'Futur proche' : 'Futur antérieur', thoughts: 'Participe présent', summary: '→ Crise en cours, compte à rebours', }; case 16: // Passé Réflexif 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: // Futur Prophétique 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: // Conditionnel Visionnaire 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: // Imparfait Poétique 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: // Second Person Narrative 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', }; } } static presetStoryType( presetType: string, setTone: Dispatch>, setAtmosphere: Dispatch>, setVerbTense: Dispatch>, setPerson: Dispatch>, setDialogueType: Dispatch>, setIsExplicit: Dispatch>, ): 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; } } static getNarrativePerson(value: number, level: number): string { if (level === 1 /* Débutant */) { // Options simples et courantes 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 /* Intermédiaire */) { // Ajoute des options plus complexes 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 /* Avancé */) { // Toutes les options, y compris "Deuxième personne" et "Nous collectif" 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'; } static getDialogueType(value: number, level: number): string { // Restreindre les options selon le niveau if (level === 1 /* Débutant */) { // Options simples 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 /* Intermédiaire */) { // Ajoute "Dialogue mixte" 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 /* Avancé */) { // Toutes les options, y compris "Monologue intérieur" 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'; } }