Files
ERitors-Scribe-Desktop/electron/database/models/Story.ts
natreex baa45ac106 Add Content, Model, and Story models with text processing and AI model configuration utilities
- Implement `Content` model for converting Tiptap raw data into HTML and plain text.
- Add `Model` for storing and managing AI model configurations with pricing and metadata.
- Introduce `Story` model to handle verbal styles and linguistic properties for diverse narrative structures.
- Update `book.repository.ts` to refine `updateBookBasicInformation` and `insertNewPlotPoint` methods, removing unused parameters and optimizing queries.
2025-11-17 20:14:22 -05:00

713 lines
41 KiB
TypeScript
Executable File
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
export interface VerbalTimeProps{
actions: string;
descriptions: string;
dialogues: string;
thoughts: string;
summary: string;
}
export interface DialogueProps{
description: string;
example: string;
}
export default class Story {
constructor() {}
static getVerbesStyle(verbalTimeValue: number, level: number, lang: "fr" | "en"): VerbalTimeProps {
switch (verbalTimeValue) {
case 1: // Passé Simple / Simple Past
return {
actions: level === 1
? (lang === "fr" ? 'Passé composé' : 'Past perfect')
: level === 2
? (lang === "fr" ? 'Passé simple' : 'Simple past')
: (lang === "fr" ? 'Passé simple + passé antérieur' : 'Simple past + past perfect'),
descriptions: level === 1
? (lang === "fr" ? 'Imparfait' : 'Imperfect')
: level === 2
? (lang === "fr" ? 'Imparfait' : 'Imperfect')
: (lang === "fr" ? 'Imparfait + plus-que-parfait' : 'Imperfect + pluperfect'),
dialogues: level === 1
? (lang === "fr" ? 'Présent' : 'Present')
: level === 2
? (lang === "fr" ? 'Présent' : 'Present')
: (lang === "fr" ? 'Présent + passé composé' : 'Present + present perfect'),
thoughts: level === 1
? (lang === "fr" ? 'Imparfait' : 'Imperfect')
: level === 2
? (lang === "fr" ? 'Plus-que-parfait' : 'Pluperfect')
: (lang === "fr" ? 'Plus-que-parfait + subjonctif passé' : 'Pluperfect + past subjunctive'),
summary: lang === "fr" ? '→ Narrations épurées, style classique' : '→ Clean narratives, classical style',
};
case 2: // Passé Immédiat / Immediate Past
return {
actions: level === 1
? (lang === "fr" ? 'Passé composé' : 'Present perfect')
: level === 2
? (lang === "fr" ? 'Passé composé' : 'Present perfect')
: (lang === "fr" ? 'Passé composé + présent' : 'Present perfect + present'),
descriptions: level === 1
? (lang === "fr" ? 'Imparfait' : 'Imperfect')
: level === 2
? (lang === "fr" ? 'Imparfait' : 'Imperfect')
: (lang === "fr" ? 'Imparfait + participe passé' : 'Imperfect + past participle'),
dialogues: level === 1
? (lang === "fr" ? 'Présent' : 'Present')
: level === 2
? (lang === "fr" ? 'Présent' : 'Present')
: (lang === "fr" ? 'Présent + passé composé' : 'Present + present perfect'),
thoughts: level === 1
? (lang === "fr" ? 'Présent' : 'Present')
: level === 2
? (lang === "fr" ? 'Présent' : 'Present')
: (lang === "fr" ? 'Présent + passé composé' : 'Present + present perfect'),
summary: lang === "fr" ? '→ Témoignages, récits autobiographiques' : '→ Testimonies, autobiographical narratives',
};
case 3: // Passé Profond / Deep Past
return {
actions: level === 1
? (lang === "fr" ? 'Plus-que-parfait' : 'Pluperfect')
: level === 2
? (lang === "fr" ? 'Plus-que-parfait' : 'Pluperfect')
: (lang === "fr" ? 'Passé antérieur' : 'Past anterior'),
descriptions: level === 1
? (lang === "fr" ? 'Imparfait' : 'Imperfect')
: level === 2
? (lang === "fr" ? 'Plus-que-parfait' : 'Pluperfect')
: (lang === "fr" ? 'Plus-que-parfait + conditionnel passé' : 'Pluperfect + past conditional'),
dialogues: level === 1
? (lang === "fr" ? 'Présent' : 'Present')
: level === 2
? (lang === "fr" ? 'Passé composé' : 'Present perfect')
: (lang === "fr" ? 'Plus-que-parfait' : 'Pluperfect'),
thoughts: level === 1
? (lang === "fr" ? 'Plus-que-parfait' : 'Pluperfect')
: level === 2
? (lang === "fr" ? 'Plus-que-parfait' : 'Pluperfect')
: (lang === "fr" ? 'Plus-que-parfait + subjonctif passé' : 'Pluperfect + past subjunctive'),
summary: lang === "fr" ? '→ Flashbacks littéraires, tragédies' : '→ Literary flashbacks, tragedies',
};
case 4: // Présent Brut / Raw Present
return {
actions: level === 1
? (lang === "fr" ? 'Présent' : 'Present')
: level === 2
? (lang === "fr" ? 'Présent' : 'Present')
: (lang === "fr" ? 'Présent + participe présent' : 'Present + present participle'),
descriptions: level === 1
? (lang === "fr" ? 'Présent' : 'Present')
: level === 2
? (lang === "fr" ? 'Présent' : 'Present')
: (lang === "fr" ? 'Présent + adjectifs' : 'Present + adjectives'),
dialogues: level === 1
? (lang === "fr" ? 'Présent' : 'Present')
: level === 2
? (lang === "fr" ? 'Présent' : 'Present')
: (lang === "fr" ? 'Présent + impératif' : 'Present + imperative'),
thoughts: level === 1
? (lang === "fr" ? 'Présent' : 'Present')
: level === 2
? (lang === "fr" ? 'Présent' : 'Present')
: (lang === "fr" ? 'Présent + infinitif' : 'Present + infinitive'),
summary: lang === "fr" ? '→ Urgence, immersion totale' : '→ Urgency, total immersion',
};
case 5: // Présent Réflexif / Reflective Present
return {
actions: level === 1
? (lang === "fr" ? 'Présent' : 'Present')
: level === 2
? (lang === "fr" ? 'Présent' : 'Present')
: (lang === "fr" ? 'Présent + gérondif' : 'Present + gerund'),
descriptions: level === 1
? (lang === "fr" ? 'Présent' : 'Present')
: level === 2
? (lang === "fr" ? 'Présent + adjectifs' : 'Present + adjectives')
: (lang === "fr" ? 'Présent + métaphores' : 'Present + metaphors'),
dialogues: level === 1
? (lang === "fr" ? 'Présent' : 'Present')
: level === 2
? (lang === "fr" ? 'Présent' : 'Present')
: (lang === "fr" ? 'Présent + style indirect libre' : 'Present + free indirect style'),
thoughts: level === 1
? (lang === "fr" ? 'Présent' : 'Present')
: level === 2
? (lang === "fr" ? 'Présent' : 'Present')
: (lang === "fr" ? 'Présent + subjonctif présent' : 'Present + present subjunctive'),
summary: lang === "fr" ? '→ Méditations philosophiques' : '→ Philosophical meditations',
};
case 6: // Futur Projeté / Projected Future
return {
actions: level === 1
? (lang === "fr" ? 'Futur simple' : 'Simple future')
: level === 2
? (lang === "fr" ? 'Futur simple' : 'Simple future')
: (lang === "fr" ? 'Futur antérieur' : 'Future perfect'),
descriptions: level === 1
? (lang === "fr" ? 'Futur simple' : 'Simple future')
: level === 2
? (lang === "fr" ? 'Futur simple' : 'Simple future')
: (lang === "fr" ? 'Futur antérieur' : 'Future perfect'),
dialogues: level === 1
? (lang === "fr" ? 'Futur simple' : 'Simple future')
: level === 2
? (lang === "fr" ? 'Futur simple' : 'Simple future')
: (lang === "fr" ? 'Futur simple + conditionnel' : 'Simple future + conditional'),
thoughts: level === 1
? (lang === "fr" ? 'Futur simple' : 'Simple future')
: level === 2
? (lang === "fr" ? 'Futur simple' : 'Simple future')
: (lang === "fr" ? 'Futur antérieur' : 'Future perfect'),
summary: lang === "fr" ? '→ Prophéties, plans stratégiques' : '→ Prophecies, strategic plans',
};
case 7: // Futur Catastrophe / Catastrophic Future
return {
actions: level === 1
? (lang === "fr" ? 'Futur simple' : 'Simple future')
: level === 2
? (lang === "fr" ? 'Futur simple' : 'Simple future')
: (lang === "fr" ? 'Futur antérieur' : 'Future perfect'),
descriptions: level === 1
? (lang === "fr" ? 'Futur simple' : 'Simple future')
: level === 2
? (lang === "fr" ? 'Futur simple' : 'Simple future')
: (lang === "fr" ? 'Futur antérieur + conditionnel' : 'Future perfect + conditional'),
dialogues: level === 1
? (lang === "fr" ? 'Futur simple' : 'Simple future')
: level === 2
? (lang === "fr" ? 'Futur simple' : 'Simple future')
: (lang === "fr" ? 'Futur simple + impératif' : 'Simple future + imperative'),
thoughts: level === 1
? (lang === "fr" ? 'Futur simple' : 'Simple future')
: level === 2
? (lang === "fr" ? 'Futur simple' : 'Simple future')
: (lang === "fr" ? 'Conditionnel présent' : 'Present conditional'),
summary: lang === "fr" ? '→ Dystopies, récits post-apocalyptiques' : '→ Dystopias, post-apocalyptic narratives',
};
case 8: // Imparfait Onirique / Dreamlike Imperfect
return {
actions: level === 1
? (lang === "fr" ? 'Imparfait' : 'Imperfect')
: level === 2
? (lang === "fr" ? 'Imparfait' : 'Imperfect')
: (lang === "fr" ? 'Imparfait + conditionnel présent' : 'Imperfect + present conditional'),
descriptions: level === 1
? (lang === "fr" ? 'Imparfait' : 'Imperfect')
: level === 2
? (lang === "fr" ? 'Imparfait' : 'Imperfect')
: (lang === "fr" ? 'Imparfait + conditionnel présent' : 'Imperfect + present conditional'),
dialogues: level === 1
? (lang === "fr" ? 'Imparfait' : 'Imperfect')
: level === 2
? (lang === "fr" ? 'Imparfait' : 'Imperfect')
: (lang === "fr" ? 'Imparfait + conditionnel présent' : 'Imperfect + present conditional'),
thoughts: level === 1
? (lang === "fr" ? 'Imparfait' : 'Imperfect')
: level === 2
? (lang === "fr" ? 'Imparfait' : 'Imperfect')
: (lang === "fr" ? 'Imparfait + subjonctif présent' : 'Imperfect + present subjunctive'),
summary: lang === "fr" ? '→ Rêves, souvenirs déformés' : '→ Dreams, distorted memories',
};
case 9: // Conditionnel Hypothétique / Hypothetical Conditional
return {
actions: level === 1
? (lang === "fr" ? 'Conditionnel présent' : 'Present conditional')
: level === 2
? (lang === "fr" ? 'Conditionnel présent' : 'Present conditional')
: (lang === "fr" ? 'Conditionnel passé' : 'Past conditional'),
descriptions: level === 1
? (lang === "fr" ? 'Conditionnel présent' : 'Present conditional')
: level === 2
? (lang === "fr" ? 'Conditionnel présent' : 'Present conditional')
: (lang === "fr" ? 'Conditionnel passé' : 'Past conditional'),
dialogues: level === 1
? (lang === "fr" ? 'Conditionnel présent' : 'Present conditional')
: level === 2
? (lang === "fr" ? 'Conditionnel présent' : 'Present conditional')
: (lang === "fr" ? 'Conditionnel présent + subjonctif' : 'Present conditional + subjunctive'),
thoughts: level === 1
? (lang === "fr" ? 'Conditionnel présent' : 'Present conditional')
: level === 2
? (lang === "fr" ? 'Conditionnel présent' : 'Present conditional')
: (lang === "fr" ? 'Conditionnel passé' : 'Past conditional'),
summary: lang === "fr" ? '→ Uchronies, réalités alternatives' : '→ Alternate histories, alternative realities',
};
case 10: // Subjonctif Angoissé / Anxious Subjunctive
return {
actions: level === 1
? (lang === "fr" ? 'Présent' : 'Present')
: level === 2
? (lang === "fr" ? 'Présent' : 'Present')
: (lang === "fr" ? 'Présent + subjonctif présent' : 'Present + present subjunctive'),
descriptions: level === 1
? (lang === "fr" ? 'Présent' : 'Present')
: level === 2
? (lang === "fr" ? 'Présent' : 'Present')
: (lang === "fr" ? 'Présent + subjonctif présent' : 'Present + present subjunctive'),
dialogues: level === 1
? (lang === "fr" ? 'Présent' : 'Present')
: level === 2
? (lang === "fr" ? 'Présent + interjections' : 'Present + interjections')
: (lang === "fr" ? 'Présent + subjonctif présent' : 'Present + present subjunctive'),
thoughts: level === 1
? (lang === "fr" ? 'Présent' : 'Present')
: level === 2
? (lang === "fr" ? 'Présent' : 'Present')
: (lang === "fr" ? 'Subjonctif présent' : 'Present subjunctive'),
summary: lang === "fr" ? '→ Drames psychologiques, dilemmes' : '→ Psychological dramas, dilemmas',
};
case 11: // Mélancolie Composée / Compound Melancholy
return {
actions: level === 1
? (lang === "fr" ? 'Passé composé' : 'Present perfect')
: level === 2
? (lang === "fr" ? 'Passé composé' : 'Present perfect')
: (lang === "fr" ? 'Passé composé + plus-que-parfait' : 'Present perfect + pluperfect'),
descriptions: level === 1
? (lang === "fr" ? 'Imparfait' : 'Imperfect')
: level === 2
? (lang === "fr" ? 'Imparfait' : 'Imperfect')
: (lang === "fr" ? 'Imparfait + conditionnel passé' : 'Imperfect + past conditional'),
dialogues: level === 1
? (lang === "fr" ? 'Présent' : 'Present')
: level === 2
? (lang === "fr" ? 'Passé composé' : 'Present perfect')
: (lang === "fr" ? 'Plus-que-parfait' : 'Pluperfect'),
thoughts: level === 1
? (lang === "fr" ? 'Imparfait' : 'Imperfect')
: level === 2
? (lang === "fr" ? 'Plus-que-parfait' : 'Pluperfect')
: (lang === "fr" ? 'Plus-que-parfait + conditionnel passé' : 'Pluperfect + past conditional'),
summary: lang === "fr" ? '→ Regrets, introspection nostalgique' : '→ Regrets, nostalgic introspection',
};
case 12: // Urgence Narrative / Narrative Urgency
return {
actions: level === 1
? (lang === "fr" ? 'Présent' : 'Present')
: level === 2
? (lang === "fr" ? 'Présent' : 'Present')
: (lang === "fr" ? 'Présent + participe présent' : 'Present + present participle'),
descriptions: level === 1
? (lang === "fr" ? 'Présent' : 'Present')
: level === 2
? (lang === "fr" ? 'Présent' : 'Present')
: (lang === "fr" ? 'Présent + adjectifs courts' : 'Present + short adjectives'),
dialogues: level === 1
? (lang === "fr" ? 'Présent' : 'Present')
: level === 2
? (lang === "fr" ? 'Présent + impératif' : 'Present + imperative')
: (lang === "fr" ? 'Impératif + présent' : 'Imperative + present'),
thoughts: level === 1
? (lang === "fr" ? 'Présent' : 'Present')
: level === 2
? (lang === "fr" ? 'Présent' : 'Present')
: (lang === "fr" ? 'Présent + infinitif' : 'Present + infinitive'),
summary: lang === "fr" ? '→ Crise en cours, compte à rebours' : '→ Ongoing crisis, countdown',
};
case 13: // Présent Émotionnel / Emotional Present
return {
actions: level === 1
? (lang === "fr" ? 'Présent' : 'Present')
: level === 2
? (lang === "fr" ? 'Présent' : 'Present')
: (lang === "fr" ? 'Présent + participe présent' : 'Present + present participle'),
descriptions: level === 1
? (lang === "fr" ? 'Présent' : 'Present')
: level === 2
? (lang === "fr" ? 'Présent + adjectifs' : 'Present + adjectives')
: (lang === "fr" ? 'Présent + adjectifs expressifs' : 'Present + expressive adjectives'),
dialogues: level === 1
? (lang === "fr" ? 'Présent' : 'Present')
: level === 2
? (lang === "fr" ? 'Présent + interjections' : 'Present + interjections')
: (lang === "fr" ? 'Présent + style expressif' : 'Present + expressive style'),
thoughts: level === 1
? (lang === "fr" ? 'Présent' : 'Present')
: level === 2
? (lang === "fr" ? 'Présent' : 'Present')
: (lang === "fr" ? 'Présent + exclamations' : 'Present + exclamations'),
summary: lang === "fr" ? '→ Émotions intenses, introspections vives' : '→ Intense emotions, vivid introspections',
};
case 14: // Présent Introspectif / Introspective Present
return {
actions: level === 1
? (lang === "fr" ? 'Présent' : 'Present')
: level === 2
? (lang === "fr" ? 'Présent' : 'Present')
: (lang === "fr" ? 'Présent + gérondif' : 'Present + gerund'),
descriptions: level === 1
? (lang === "fr" ? 'Présent' : 'Present')
: level === 2
? (lang === "fr" ? 'Présent + adjectifs' : 'Present + adjectives')
: (lang === "fr" ? 'Présent + métaphores' : 'Present + metaphors'),
dialogues: level === 1
? (lang === "fr" ? 'Présent' : 'Present')
: level === 2
? (lang === "fr" ? 'Présent' : 'Present')
: (lang === "fr" ? 'Style indirect libre' : 'Free indirect style'),
thoughts: level === 1
? (lang === "fr" ? 'Présent' : 'Present')
: level === 2
? (lang === "fr" ? 'Présent' : 'Present')
: (lang === "fr" ? 'Présent + subjonctif présent' : 'Present + present subjunctive'),
summary: lang === "fr" ? '→ Réflexions profondes, analyse des émotions' : '→ Deep reflections, emotional analysis',
};
case 15: // Présent Historique / Historical Present
return {
actions: level === 1
? (lang === "fr" ? 'Présent' : 'Present')
: level === 2
? (lang === "fr" ? 'Présent' : 'Present')
: (lang === "fr" ? 'Présent + passé simple' : 'Present + simple past'),
descriptions: level === 1
? (lang === "fr" ? 'Présent' : 'Present')
: level === 2
? (lang === "fr" ? 'Présent' : 'Present')
: (lang === "fr" ? 'Présent + imparfait' : 'Present + imperfect'),
dialogues: level === 1
? (lang === "fr" ? 'Présent' : 'Present')
: level === 2
? (lang === "fr" ? 'Présent' : 'Present')
: (lang === "fr" ? 'Présent + passé composé' : 'Present + present perfect'),
thoughts: level === 1
? (lang === "fr" ? 'Présent' : 'Present')
: level === 2
? (lang === "fr" ? 'Présent' : 'Present')
: (lang === "fr" ? 'Présent + plus-que-parfait' : 'Present + pluperfect'),
summary: lang === "fr" ? '→ Histoires historiques avec intensité immédiate' : '→ Historical stories with immediate intensity',
};
case 16: // Passé Réflexif / Reflective Past
return {
actions: level === 1
? (lang === "fr" ? 'Passé composé' : 'Present perfect')
: level === 2
? (lang === "fr" ? 'Passé composé' : 'Present perfect')
: (lang === "fr" ? 'Passé composé + plus-que-parfait' : 'Present perfect + pluperfect'),
descriptions: level === 1
? (lang === "fr" ? 'Imparfait' : 'Imperfect')
: level === 2
? (lang === "fr" ? 'Imparfait' : 'Imperfect')
: (lang === "fr" ? 'Imparfait + conditionnel passé' : 'Imperfect + past conditional'),
dialogues: level === 1
? (lang === "fr" ? 'Présent' : 'Present')
: level === 2
? (lang === "fr" ? 'Passé composé' : 'Present perfect')
: (lang === "fr" ? 'Style indirect libre' : 'Free indirect style'),
thoughts: level === 1
? (lang === "fr" ? 'Imparfait' : 'Imperfect')
: level === 2
? (lang === "fr" ? 'Imparfait' : 'Imperfect')
: (lang === "fr" ? 'Imparfait + subjonctif passé' : 'Imperfect + past subjunctive'),
summary: lang === "fr" ? '→ Récits introspectifs, auto-analyse' : '→ Introspective narratives, self-analysis',
};
case 17: // Futur Prophétique / Prophetic Future
return {
actions: level === 1
? (lang === "fr" ? 'Futur simple' : 'Simple future')
: level === 2
? (lang === "fr" ? 'Futur simple' : 'Simple future')
: (lang === "fr" ? 'Futur antérieur' : 'Future perfect'),
descriptions: level === 1
? (lang === "fr" ? 'Futur simple' : 'Simple future')
: level === 2
? (lang === "fr" ? 'Futur simple' : 'Simple future')
: (lang === "fr" ? 'Futur antérieur' : 'Future perfect'),
dialogues: level === 1
? (lang === "fr" ? 'Futur simple' : 'Simple future')
: level === 2
? (lang === "fr" ? 'Futur simple' : 'Simple future')
: (lang === "fr" ? 'Futur simple + présent gnomique' : 'Simple future + gnomic present'),
thoughts: level === 1
? (lang === "fr" ? 'Futur simple' : 'Simple future')
: level === 2
? (lang === "fr" ? 'Futur simple' : 'Simple future')
: (lang === "fr" ? 'Futur antérieur' : 'Future perfect'),
summary: lang === "fr" ? '→ Prophéties, visions apocalyptiques' : '→ Prophecies, apocalyptic visions',
};
case 18: // Conditionnel Visionnaire / Visionary Conditional
return {
actions: level === 1
? (lang === "fr" ? 'Conditionnel présent' : 'Present conditional')
: level === 2
? (lang === "fr" ? 'Conditionnel présent' : 'Present conditional')
: (lang === "fr" ? 'Conditionnel passé' : 'Past conditional'),
descriptions: level === 1
? (lang === "fr" ? 'Conditionnel présent' : 'Present conditional')
: level === 2
? (lang === "fr" ? 'Conditionnel présent' : 'Present conditional')
: (lang === "fr" ? 'Conditionnel passé' : 'Past conditional'),
dialogues: level === 1
? (lang === "fr" ? 'Conditionnel présent' : 'Present conditional')
: level === 2
? (lang === "fr" ? 'Conditionnel présent' : 'Present conditional')
: (lang === "fr" ? 'Conditionnel présent + subjonctif' : 'Present conditional + subjunctive'),
thoughts: level === 1
? (lang === "fr" ? 'Conditionnel présent' : 'Present conditional')
: level === 2
? (lang === "fr" ? 'Conditionnel présent' : 'Present conditional')
: (lang === "fr" ? 'Conditionnel passé' : 'Past conditional'),
summary: lang === "fr" ? '→ Mondes parallèles, uchronies' : '→ Parallel worlds, alternate histories',
};
case 19: // Imparfait Poétique / Poetic Imperfect
return {
actions: level === 1
? (lang === "fr" ? 'Imparfait' : 'Imperfect')
: level === 2
? (lang === "fr" ? 'Imparfait' : 'Imperfect')
: (lang === "fr" ? 'Imparfait + participe présent' : 'Imperfect + present participle'),
descriptions: level === 1
? (lang === "fr" ? 'Imparfait' : 'Imperfect')
: level === 2
? (lang === "fr" ? 'Imparfait + adjectifs' : 'Imperfect + adjectives')
: (lang === "fr" ? 'Imparfait + métaphores' : 'Imperfect + metaphors'),
dialogues: level === 1
? (lang === "fr" ? 'Présent' : 'Present')
: level === 2
? (lang === "fr" ? 'Imparfait' : 'Imperfect')
: (lang === "fr" ? 'Style poétique libre' : 'Free poetic style'),
thoughts: level === 1
? (lang === "fr" ? 'Imparfait' : 'Imperfect')
: level === 2
? (lang === "fr" ? 'Imparfait' : 'Imperfect')
: (lang === "fr" ? 'Imparfait + subjonctif présent' : 'Imperfect + present subjunctive'),
summary: lang === "fr" ? '→ Lyrisme, poésie narrative' : '→ Lyricism, narrative poetry',
};
case 20: // Second Person Narrative / Narration à la deuxième personne
return {
actions: level === 1
? (lang === "fr" ? 'Présent' : 'Present')
: level === 2
? (lang === "fr" ? 'Présent' : 'Present')
: (lang === "fr" ? 'Présent + imparfait' : 'Present + imperfect'),
descriptions: level === 1
? (lang === "fr" ? 'Présent' : 'Present')
: level === 2
? (lang === "fr" ? 'Présent' : 'Present')
: (lang === "fr" ? 'Présent + conditionnel présent' : 'Present + present conditional'),
dialogues: level === 1
? (lang === "fr" ? 'Présent' : 'Present')
: level === 2
? (lang === "fr" ? 'Présent' : 'Present')
: (lang === "fr" ? 'Présent + style direct' : 'Present + direct style'),
thoughts: level === 1
? (lang === "fr" ? 'Présent' : 'Present')
: level === 2
? (lang === "fr" ? 'Présent' : 'Present')
: (lang === "fr" ? 'Présent + conditionnel présent' : 'Present + present conditional'),
summary: lang === "fr" ? '→ Immersion totale, récits interactifs' : '→ Total immersion, interactive narratives',
};
default:
return {
actions: level === 1
? (lang === "fr" ? 'Passé composé' : 'Present perfect')
: level === 2
? (lang === "fr" ? 'Passé simple' : 'Simple past')
: (lang === "fr" ? 'Passé simple + passé antérieur' : 'Simple past + past perfect'),
descriptions: level === 1
? (lang === "fr" ? 'Imparfait' : 'Imperfect')
: level === 2
? (lang === "fr" ? 'Imparfait' : 'Imperfect')
: (lang === "fr" ? 'Imparfait + plus-que-parfait' : 'Imperfect + pluperfect'),
dialogues: level === 1
? (lang === "fr" ? 'Présent' : 'Present')
: level === 2
? (lang === "fr" ? 'Présent' : 'Present')
: (lang === "fr" ? 'Présent + passé composé' : 'Present + present perfect'),
thoughts: level === 1
? (lang === "fr" ? 'Imparfait' : 'Imperfect')
: level === 2
? (lang === "fr" ? 'Plus-que-parfait' : 'Pluperfect')
: (lang === "fr" ? 'Plus-que-parfait + subjonctif passé' : 'Pluperfect + past subjunctive'),
summary: lang === "fr" ? '→ Narrations épurées, style classique' : '→ Clean narratives, classical style',
};
}
}
static getDialogueType(value: number, level: number, lang: "fr" | "en"): string {
if (lang === "fr") {
// Version française existante
if (level === 1 /* Débutant - Secondaire 5 */) {
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 - Collégial */) {
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é - Universitaire/Littéraire */) {
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';
}
}
} else if (lang === "en") {
// Version anglaise canadienne
if (level === 1 /* Beginner - Grade 12 level */) {
switch (value) {
case 1:
return 'Direct dialogue - Exact words (e.g., "I love you!")';
case 2:
return 'Indirect dialogue - Summarized by narrator (e.g., He said that he loved me)';
default:
return 'Direct dialogue';
}
} else if (level === 2 /* Intermediate - College level */) {
switch (value) {
case 1:
return 'Direct dialogue';
case 2:
return 'Indirect dialogue';
case 3:
return 'Mixed dialogue (e.g., "I love you," he said, then explained his feelings)';
default:
return 'Direct dialogue';
}
} else if (level === 3 /* Advanced - University/Literary level */) {
switch (value) {
case 1:
return 'Direct dialogue';
case 2:
return 'Indirect dialogue';
case 3:
return 'Mixed dialogue';
case 4:
return 'Interior monologue (e.g., *I cannot lose him...*)';
default:
return 'Direct dialogue';
}
}
}
return lang === "fr" ? 'Dialogue direct' : 'Direct dialogue';
}
static getLanguage(value: number): string {
switch (value) {
case 1: // Français Canada
return 'Français Canada';
case 2: // Français France
return 'Français France';
case 3: // Français Québécois
return 'Français Québécois';
case 4: // Anglais
return 'English Canada';
default:
return 'Français Canada';
}
}
static getFormat(value: number): string {
switch (value) {
case 1: // Français Canada (espace fine «texte»)
case 3: // Français Québécois
return '«dialogue» - avec guillemet - [Espace fine insécable]';
case 2: // Français France
return '« dialogue » - avec guillemet - [Espace insécable standard]';
case 4: // Anglais
return `"dialogue" - or with a dash - [No space]`;
default:
return 'Format : « dialogue » - avec guillemet - [Espace fine insécable]';
}
}
static getNarrativePerson(value: number, level: number, lang: "fr" | "en"): string {
if (level === 1) {
switch (value) {
case 1:
return lang === "fr" ? 'Première personne (Je acteur)' : 'First Person (I as actor)';
case 3:
return lang === "fr" ? 'Troisième omnisciente - Narration globale' : 'Third Person Omniscient - Global narration';
default:
return 'Première personne';
}
} else if (level === 2) {
switch (value) {
case 1:
return lang === "fr" ? 'Première personne (Je acteur)' : 'First Person (I as actor)';
case 2:
return lang === "fr" ? 'Première personne (Je témoin) - Observateur' : 'First Person (I as witness) - Observer';
case 3:
return lang === "fr" ? 'Troisième omnisciente' : 'Third Person Omniscient';
case 4:
return lang === "fr" ? 'Troisième limitée - Focus sur un personnage' : 'Third Person Limited - Focus on a character';
default:
return 'Première personne';
}
} else if (level === 3) {
switch (value) {
case 1:
return lang === "fr" ? 'Première personne (Je acteur)' : 'First Person (I as actor)';
case 2:
return lang === "fr" ? 'Première personne (Je témoin) - Observateur' : 'First Person (I as witness) - Observer';
case 3:
return lang === "fr" ? 'Troisième omnisciente' : 'Third Person Omniscient';
case 4:
return lang === "fr" ? 'Troisième limitée - Focus sur un personnage' : 'Third Person Limited - Focus on a character';
case 5:
return lang === "fr" ? 'Deuxième personne (Tu) - Immersion forte' : 'Second Person (You) - Strong immersion';
case 6:
return lang === "fr" ? 'Nous collectif - Voix chorale' : 'We Collective - Choral voice';
default:
return lang === "fr" ? 'Troisième omnisciente' : 'Third Person Omniscient';
}
}
return 'Première personne';
}
static getStoryState(value: number): string {
switch (value) {
case 0:
return 'Continue à partir de la mise en contexte avec cela :';
case 1:
return 'Débutons le chapitre avec :';
case 2:
return 'Continue à partir de la mise en contexte et ferme le chapitre avec :';
case 3:
return `Commençons le l'histoire avec :`;
case 4:
return 'Terminons l\'histoire avec :';
default:
return 'Continue à partir de la mise en contexte avec cela :';
}
}
}