/**
 * @description 学习相关类型定义
 * @author yslg
 * @since 2025-10-15
 */

import type { BaseDTO } from '@/types';


/**
 * 课程实体
 */
export interface Course extends BaseDTO {
  /** 课程唯一标识 */
  courseID?: string;
  /** 课程名称 */
  name?: string;
  /** 课程封面图片 */
  coverImage?: string;
  /** 课程描述 */
  description?: string;
  /** 课程内容 */
  content?: string;
  /** 课程时长（分钟） */
  duration?: number;
  /** 授课老师 */
  teacher?: string;
  /** 状态（0未上线 1已上线 2已下架） */
  status?: number;
  /** 浏览次数 */
  viewCount?: number;
  /** 学习人数 */
  learnCount?: number;
  /** 排序号 */
  orderNum?: number;
  /** 创建者 */
  creator?: string;
  /** 更新者 */
  updater?: string;
}

/**
 * 课程章节实体
 */
export interface CourseChapter extends BaseDTO {
  /** 章节ID */
  chapterID?: string;
  /** 课程ID */
  courseID?: string;
  /** 父章节ID */
  parentID?: string;
  /** 章节名称 */
  name?: string;
  /** 章节内容 */
  content?: string;
  /** 章节类型（1视频 2文档 3音频） */
  chapterType?: number;
  /** 资源ID */
  resourceID?: string;
  /** 视频URL */
  videoUrl?: string;
  /** 章节时长（分钟） */
  duration?: number;
  /** 排序号 */
  orderNum?: number;
  /** 创建者 */
  creator?: string;
  /** 更新者 */
  updater?: string;
}

/**
 * 课程标签关联实体
 */
export interface CourseTag extends BaseDTO {
  /** 课程ID */
  courseID?: string;
  /** 标签ID */
  tagID?: string;
  /** 创建者 */
  creator?: string;
}

/**
 * 学习节点实体
 */
export interface CourseNode extends BaseDTO {
  /** 章节ID */
  chapterID?: string;
  /** 节点ID */
  nodeID?: string;
  /** 节点名称 */
  name?: string;
  /** 节点内容 */
  content?: string;
  /** 节点类型（0文章资源 1富文本 2其他上传文件） */
  nodeType?: number;
  /** 资源ID */
  resourceID?: string;
  /** 视频URL */
  videoUrl?: string;
  /** 节点时长（分钟） */
  duration?: number;
  /** 排序号 */
  orderNum?: number;
  /** 是否必修（1必修 0选修） */
  isRequired?: number;
  /** 创建者 */
  creator?: string;
  /** 更新者 */
  updater?: string;
}

export interface ChapterVO extends BaseDTO {
  chapter: CourseChapter;
  nodes: CourseNode[];
}

export interface CourseVO extends BaseDTO {
  course: Course;
  courseChapters: ChapterVO[];
  courseTags: CourseTag[];
}

/**
 * 学习任务实体
 */
export interface LearningTask extends BaseDTO {
  /** 任务唯一标识 */
  taskID?: string;
  /** 任务名称 */
  name?: string;
  /** 任务描述 */
  description?: string;
  /** 开始时间 */
  startTime?: string;
  /** 结束时间 */
  endTime?: string;
  /** 状态（0草稿 1进行中 2已结束） */
  status?: number;
  /** 创建者 */
  creator?: string;
  /** 更新者 */
  updater?: string;
}

/**
 * 学习记录实体
 */
export interface LearningRecord extends BaseDTO {
  /** 用户ID */
  userID?: string;
  /** 任务ID */
  taskID?: string;
  /** 资源类型（1资源 2课程 3章节） */
  resourceType?: number;
  /** 资源ID */
  resourceID?: string;
  /** 课程ID */
  courseID?: string;
  /** 章节ID */
  chapterID?: string;
  /** 节点ID */
  nodeID?: string;
  /** 学习时长（秒） */
  duration?: number;
  /** 学习进度（0-100） */
  progress?: number;
  /** 是否完成 */
  isComplete?: boolean;
  /** 完成时间 */
  completeTime?: string;
  /** 最后学习时间 */
  lastLearnTime?: string;
}

/**
 * 学习统计实体
 */
export interface LearningStatistics extends BaseDTO {
  /** 用户ID */
  userID?: string;
  /** 统计日期 */
  statisticsDate?: string;
  /** 学习时长（秒） */
  totalDuration?: number;
  /** 学习资源数 */
  resourceCount?: number;
  /** 完成任务数 */
  taskCount?: number;
  /** 获得积分 */
  points?: number;
}

/**
 * 任务用户关联实体
 */
export interface TaskUser extends BaseDTO {
  /** 任务ID */
  taskID?: string;
  /** 用户ID */
  userID?: string;
  /** 完成状态（0未完成 1已完成） */
  status?: number;
  /** 学习进度 */
  progress?: number;
  /** 完成时间 */
  completeTime?: string;
}

/**
 * 任务项实体（统一管理资源和课程）
 */
export interface TaskItem extends BaseDTO {
  /** 任务ID */
  taskID?: string;
  /** 项类型（1资源 2课程） */
  itemType?: number;
  /** 项ID（资源ID或课程ID） */
  itemID?: string;
  /** 是否必须完成 */
  required?: boolean;
  /** 排序号 */
  orderNum?: number;
  /** 创建者 */
  creator?: string;
  /** 更新者 */
  updater?: string;
}

/**
 * 任务项视图对象（扩展了任务基本信息）
 */
export interface TaskItemVO extends LearningTask {
  /** 项类型（1资源 2课程） */
  itemType?: number;
  /** 课程ID */
  courseID?: string;
  /** 课程名称 */
  courseName?: string;
  /** 资源ID */
  resourceID?: string;
  /** 资源名称 */
  resourceName?: string;
  /** 用户ID */
  userID?: string;
  /** 用户名 */
  username?: string;
  /** 是否必修 */
  required?: boolean;
  /** 排序号 */
  orderNum?: number;
  /** 任务状态 */
  status?: number;
  /** 学习进度（0-100） */
  progress?: number;
  /** 完成时间 */
  completeTime?: string;
}

/**
 * 任务视图对象（包含任务及关联的课程、资源、用户）
 */
export interface TaskVO extends BaseDTO {
  /** 学习任务基本信息 */
  learningTask: LearningTask;
  /** 任务关联的课程列表 */
  taskCourses: TaskItemVO[];
  /** 任务关联的资源列表 */
  taskResources: TaskItemVO[];
  /** 任务关联的用户列表 */
  taskUsers: TaskItemVO[];
  /** 总任务数 */
  totalTaskNum?: number;
  /** 已完成任务数 */
  completedTaskNum?: number;
  /** 学习中任务数 */
  learningTaskNum?: number;
  /** 未开始任务数 */
  notStartTaskNum?: number;
  /** 任务状态 */
  taskStatus?: number;
}

/**
 * 学习计划实体
 */
export interface LearningPlan extends BaseDTO {
  /** 计划名称 */
  name?: string;
  /** 计划描述 */
  description?: string;
  /** 开始时间 */
  startTime?: string;
  /** 结束时间 */
  endTime?: string;
  /** 状态（0草稿 1进行中 2已结束） */
  status?: number;
  /** 创建者 */
  creator?: string;
}

/**
 * 学习进度统计
 */
export interface LearningProgress {
  /** 用户ID */
  userID?: string;
  /** 任务ID */
  taskID?: string;
  /** 总任务数 */
  totalTasks?: number;
  /** 已完成任务数 */
  completedTasks?: number;
  /** 完成百分比 */
  completionRate?: number;
  /** 学习时长 */
  totalDuration?: number;
}

/**
 * 学习记录统计
 */
export interface LearningRecordStatistics {
  /** 日期 */
  date?: string;
  /** 学习时长 */
  duration?: number;
  /** 学习资源数 */
  resourceCount?: number;
  /** 完成任务数 */
  taskCount?: number;
}
