import Dexie, { type Table } from 'dexie' import type { SaveData } from '../types' interface SaveRecord { id?: number slot: number timestamp: number currentScene: string variables: string flags: string history: string thumbnail?: string } class SaveDB extends Dexie { saves!: Table constructor() { super('MovieGameSaves') this.version(2).stores({ saves: '++id, slot', }) } } const db = new SaveDB() export class SaveSystem { async save(slot: number, data: Omit): Promise { const record: SaveRecord = { slot, timestamp: data.timestamp || Date.now(), currentScene: data.currentScene, variables: JSON.stringify(data.variables), flags: JSON.stringify(data.flags), history: JSON.stringify(data.history), thumbnail: data.thumbnail, } const existing = await db.saves.where('slot').equals(slot).first() if (existing) { await db.saves.update(existing.id!, record) } else { await db.saves.add(record) } } async load(slot: number): Promise { const record = await db.saves.where('slot').equals(slot).first() if (!record) return null return { slot: record.slot, timestamp: record.timestamp, currentScene: record.currentScene, variables: JSON.parse(record.variables), flags: JSON.parse(record.flags), history: JSON.parse(record.history), thumbnail: record.thumbnail, } } async listSlots(): Promise<{ slot: number; timestamp: number; sceneLabel: string; thumbnail?: string }[]> { const records = await db.saves.orderBy('slot').toArray() return records.map((r) => ({ slot: r.slot, timestamp: r.timestamp, sceneLabel: r.currentScene, thumbnail: r.thumbnail, })) } async delete(slot: number): Promise { await db.saves.where('slot').equals(slot).delete() } }