import { httpAxios } from "@/api/ApiInstance" export interface AiCoursewareOutlineQuery { id: string fromType?: string extraPrompt?: string preferences?: AiCoursewarePreferences } export interface AiCoursewareGenerateQuery { id: string fromType?: string outline: AiCoursewareOutline visualPrompt?: string preferences?: AiCoursewarePreferences regeneratePageNo?: number } export interface AiCoursewarePreferences { lessonMinutes: number minPages: number maxPages: number assetStyle: "illustration" | "photo" | "mixed" sourceImagePolicy: "strict" | "balanced" | "creative" requireAudio: boolean requireVideo: boolean enableAnimations: boolean } export interface AiCoursewareOutline { title: string gradeName: string textbookName: string unitName: string chapterName: string courseType: string style: "cartoon" | "clean" | string textbookResearch?: AiCoursewareTextbookResearch pages: AiCoursewarePage[] } export interface AiCoursewareTextbookResearch { exactMatch: boolean confidence: "HIGH" | "MEDIUM" | "LOW" | string courseType: string contentSummary: string works: string[] verifiedFacts: string[] teachingObjectives: string[] teachingFocus: string[] learningActivities: string[] missingEvidence: string[] sources: Array<{ index?: number title?: string url: string official?: boolean }> } export interface AiCoursewarePage { pageNo: number type: string title: string subtitle?: string bullets: string[] teachingStage?: string teachingPurpose?: string learningEvidence?: string durationMinutes?: number studentContent?: { headline?: string points?: string[] } activity?: { task?: string steps?: string[] } classroomAction?: { teacherInstruction?: string studentTask?: string interactionType?: string } visual?: { layout?: string style?: string mainVisual?: string imageKeywords?: string[] } visualPlan?: { layout?: string visualRole?: string focalContent?: string visualDensity?: "low" | "medium" | "high" | string mainVisual?: string elements?: string[] contentPriority?: string[] imageKeywords?: string[] style?: string } designRequirement?: string teacherTips?: string speakerNotes?: string interaction?: { type: string question: string answer?: string } imageKeywords: string[] image?: { url: string keyword: string provider: string width?: number height?: number score?: number } resourceBindings?: AiCoursewareResourceBinding[] } export interface AiCoursewareResourceBinding { resourceId: string resourceType: "IMG" | "VIDEO" | "SONG" | "MUSIC" | "LISTEN" | "RHYTHM" | "THEORY" | "MUSIC_WIKI" | "INSTRUMENT" | "MUSICIAN" | string name?: string contentUrl?: string coverUrl?: string dataJson?: string elementSubtype?: string purpose?: string dedicatedPage?: boolean required?: boolean verified?: boolean } export interface AiCoursewareTaskInfo { taskId: string status: "PENDING" | "RUNNING" | "DONE" | "FAILED" progress: number message: string } export interface AiCoursewareGenerateResult { context: Record outline: AiCoursewareOutline } export const aiCoursewareOutlineApi = (data: AiCoursewareOutlineQuery) => { return httpAxios.axioseRquest({ method: "post", url: "/edu-app/aiCourseware/outline", data }) } export const aiCoursewareGenerateApi = (data: AiCoursewareGenerateQuery) => { return httpAxios.axioseRquest({ method: "post", url: "/edu-app/aiCourseware/generate", data }) } export const aiCoursewareTaskApi = (taskId: string) => { return httpAxios.axioseRquest({ method: "get", url: `/edu-app/aiCourseware/task/${taskId}` }) } export const aiCoursewareResultApi = (taskId: string) => { return httpAxios.axioseRquest({ method: "get", url: `/edu-app/aiCourseware/task/${taskId}/result` }) }