import { ipcMain } from 'electron'; import { createHandler } from '../database/LocalSystem.js'; import Chapter from '../database/models/Chapter.js'; import type { ChapterProps, CompanionContent, ActStory } from '../database/models/Chapter.js'; interface GetWholeChapterData { chapterId: string; version: number; bookId?: string; } interface SaveChapterContentData { chapterId: string; version: number; content: JSON; totalWordCount: number; currentTime: number; } interface AddChapterData { bookId: string; title: string; chapterOrder: number; } interface UpdateChapterData { chapterId: string; title: string; chapterOrder: number; } interface AddChapterInformationData { chapterId: string; actId: number; bookId: string; plotId: string | null; incidentId: string | null; } interface GetChapterContentData { chapterId: string; version: number; } // GET /book/chapters - Get all chapters from a book ipcMain.handle('db:book:chapters', createHandler( function(userId: string, bookId: string, lang: 'fr' | 'en'): ChapterProps[] { return Chapter.getAllChaptersFromABook(userId, bookId, lang); } ) ); // GET /chapter/whole - Get whole chapter ipcMain.handle('db:chapter:whole', createHandler( function(userId: string, data: GetWholeChapterData, lang: 'fr' | 'en'): ChapterProps { return Chapter.getWholeChapter(userId, data.chapterId, data.version, data.bookId, lang); } ) ); // GET /chapter/:id/story - Get chapter story ipcMain.handle('db:chapter:story', createHandler( function(userId: string, chapterId: string, lang: 'fr' | 'en'): ActStory[] { return Chapter.getChapterStory(userId, chapterId, lang); } ) ); // GET /chapter/content/companion - Get companion content ipcMain.handle('db:chapter:content:companion', createHandler( function(userId: string, data: GetChapterContentData, lang: 'fr' | 'en'): CompanionContent { return Chapter.getCompanionContent(userId, data.chapterId, data.version, lang); } ) ); // GET /chapter/content - Get chapter content by version ipcMain.handle('db:chapter:content:get', createHandler( function(userId: string, data: GetChapterContentData, lang: 'fr' | 'en'): string { return Chapter.getChapterContentByVersion(userId, data.chapterId, data.version, lang); } ) ); // POST /chapter/content - Save chapter content ipcMain.handle('db:chapter:content:save', createHandler( function(userId: string, data: SaveChapterContentData, lang: 'fr' | 'en'): boolean { return Chapter.saveChapterContent( userId, data.chapterId, data.version, data.content, data.totalWordCount, data.currentTime, lang ); } ) ); // GET /chapter/last-chapter - Get last chapter ipcMain.handle('db:chapter:last', createHandler( function(userId: string, bookId: string, lang: 'fr' | 'en'): ChapterProps | null { return Chapter.getLastChapter(userId, bookId, lang); } ) ); // POST /chapter/add - Add new chapter ipcMain.handle('db:chapter:create', createHandler( function(userId: string, data: AddChapterData, lang: 'fr' | 'en'): string { return Chapter.addChapter(userId, data.bookId, data.title, 0, data.chapterOrder, lang); } ) ); // DELETE /chapter/remove - Remove chapter ipcMain.handle('db:chapter:delete', createHandler( function(userId: string, chapterId: string, lang: 'fr' | 'en'): boolean { return Chapter.removeChapter(userId, chapterId, lang); } ) ); // POST /chapter/update - Update chapter ipcMain.handle('db:chapter:update', createHandler( function(userId: string, data: UpdateChapterData, lang: 'fr' | 'en'): boolean { return Chapter.updateChapter(userId, data.chapterId, data.title, data.chapterOrder, lang); } ) ); // POST /chapter/resume/add - Add chapter information ipcMain.handle('db:chapter:information:add', createHandler( function(userId: string, data: AddChapterInformationData, lang: 'fr' | 'en'): string { return Chapter.addChapterInformation( userId, data.chapterId, data.actId, data.bookId, data.plotId, data.incidentId, lang ); } ) ); // DELETE /chapter/resume/remove - Remove chapter information ipcMain.handle('db:chapter:information:remove', createHandler( function(userId: string, chapterInfoId: string, lang: 'fr' | 'en') { return Chapter.removeChapterInformation(userId, chapterInfoId, lang); } ) ); console.log('[IPC] Chapter handlers registered');