import { ipcMain } from 'electron' import { deleteClassWithProfiles, deleteStudentProfile, getStudentProfile, generateStudentComment, listStudentProfiles, loadStudentData, migrateStoredImagesToFiles, migrateLocalStudentData, replaceProfilesForClass, saveClasses, updateStudentProfile } from '../services/studentService' import type { ClassProfile, ChildProfile, DeleteClassResponse, DeleteStudentProfileResponse, GenerateStudentCommentInput, GenerateStudentCommentResponse, GetStudentProfileResponse, LoadStudentDataInput, ListStudentProfilesInput, ListStudentProfilesResponse, LoadStudentDataResponse, ReplaceClassProfilesResponse, SaveClassesResponse, UpdateStudentProfileInput, UpdateStudentProfileResponse } from '../types/student' function getErrorMessage(error: unknown): string { return error instanceof Error ? error.message : '数据库操作失败' } export function registerStudentIpc(): void { void migrateStoredImagesToFiles().catch((error) => { console.error('[图片迁移] 迁移 SQLite 内图片到文件失败', error) }) ipcMain.handle('student:load', async (_, payload?: LoadStudentDataInput): Promise => { try { const studentData = await loadStudentData(payload) return { ok: true, ...studentData } } catch (error) { return { ok: false, message: getErrorMessage(error) } } }) ipcMain.handle( 'student:list', async (_, payload: ListStudentProfilesInput): Promise => { try { return { ok: true, ...(await listStudentProfiles(payload)) } } catch (error) { return { ok: false, message: getErrorMessage(error) } } } ) ipcMain.handle( 'student:get-profile', async (_, profileId: string): Promise => { try { return { ok: true, profile: await getStudentProfile(profileId) } } catch (error) { return { ok: false, message: getErrorMessage(error) } } } ) ipcMain.handle( 'student:update-profile', async (_, payload: UpdateStudentProfileInput): Promise => { try { return { ok: true, profile: await updateStudentProfile(payload) } } catch (error) { return { ok: false, message: getErrorMessage(error) } } } ) ipcMain.handle( 'student:generate-comment', async (_, payload: GenerateStudentCommentInput): Promise => { try { return { ok: true, profile: await generateStudentComment(payload.profileId) } } catch (error) { return { ok: false, message: getErrorMessage(error) } } } ) ipcMain.handle( 'student:save-classes', async (_, classes: ClassProfile[]): Promise => { try { await saveClasses(classes) return { ok: true } } catch (error) { return { ok: false, message: getErrorMessage(error) } } } ) ipcMain.handle( 'student:replace-class-profiles', async ( _, payload: { classItem: ClassProfile; profiles: ChildProfile[] } ): Promise => { try { await replaceProfilesForClass(payload.classItem, payload.profiles) return { ok: true } } catch (error) { return { ok: false, message: getErrorMessage(error) } } } ) ipcMain.handle( 'student:delete-class', async (_, classId: string): Promise => { try { await deleteClassWithProfiles(classId) return { ok: true } } catch (error) { return { ok: false, message: getErrorMessage(error) } } } ) ipcMain.handle( 'student:delete-profile', async (_, profileId: string): Promise => { try { await deleteStudentProfile(profileId) return { ok: true } } catch (error) { return { ok: false, message: getErrorMessage(error) } } } ) ipcMain.handle( 'student:migrate-local', async ( _, payload: { classes: ClassProfile[]; profiles: ChildProfile[] } ): Promise => { try { await migrateLocalStudentData(payload.classes, payload.profiles) return { ok: true } } catch (error) { return { ok: false, message: getErrorMessage(error) } } } ) }