import Dexie from "dexie" import { getToken } from "@/libs/auth" import type { AiCoursewareOutline, AiCoursewarePreferences, AiCoursewareResourceBinding, AiCoursewarePage } from "@/api/aiCourseware" import type { Slide, SlideTheme } from "@/types/slides" export type ProtectedPageContent = Pick & { studentTask?: string } export interface AiDraftRecord { key: string updatedAt: number outline?: AiCoursewareOutline converted?: { title: string; theme: Partial; slides: Slide[] } preferences: AiCoursewarePreferences extraPrompt: string taskId?: string resources?: AiCoursewareResourceBinding[] protectedContent?: Array<[number, ProtectedPageContent]> backup?: { title: string; theme: SlideTheme; slides: Slide[]; width: number; ratio: number } } const database = new Dexie("AI_COURSEWARE_DRAFTS") database.version(1).stores({ drafts: "key,updatedAt" }) const drafts = database.table("drafts") export async function draftKey(id: string, source: string): Promise { const token = getToken() if (!token) throw new Error("登录状态不可用,无法保存个人草稿") const digest = await crypto.subtle.digest("SHA-256", new TextEncoder().encode(token)) const owner = Array.from(new Uint8Array(digest), byte => byte.toString(16).padStart(2, "0")).join("") return `${owner}:${source}:${id}` } export const loadAiDraft = (key: string) => drafts.get(key) export const saveAiDraft = (record: AiDraftRecord) => drafts.put(JSON.parse(JSON.stringify(record)))