- 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.
713 lines
41 KiB
TypeScript
Executable File
713 lines
41 KiB
TypeScript
Executable File
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 :';
|
||
}
|
||
}
|
||
}
|