package com.lesingle.edu.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 课程包实体
 * 包含课程包管理的综合字段
 */
@Schema(description = "课程包实体（通过7步创建流程创建）")
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("course_package")
public class CoursePackage extends BaseEntity {

    @Schema(description = "租户 ID")
    private Long tenantId;

    @Schema(description = "课程名称")
    private String name;

    @Schema(description = "课程编码")
    private String code;

    @Schema(description = "课程描述")
    private String description;

    @Schema(description = "封面 URL")
    private String coverUrl;

    @Schema(description = "课程类别")
    private String category;

    @Schema(description = "适用年龄范围")
    private String ageRange;

    @Schema(description = "难度等级")
    private String difficultyLevel;

    @Schema(description = "课程时长（分钟）")
    private Integer durationMinutes;

    @Schema(description = "课程目标")
    private String objectives;

    @Schema(description = "状态")
    private String status;

    @Schema(description = "是否系统课程")
    private Integer isSystem;

    // ============================================
    // 课程套餐重构字段 (2026-02-28)
    // ============================================

    @Schema(description = "核心内容")
    private String coreContent;

    @Schema(description = "课程介绍 - 概要")
    private String introSummary;

    @Schema(description = "课程介绍 - 亮点")
    private String introHighlights;

    @Schema(description = "课程介绍 - 目标")
    private String introGoals;

    @Schema(description = "课程介绍 - 进度安排")
    private String introSchedule;

    @Schema(description = "课程介绍 - 重点")
    private String introKeyPoints;

    @Schema(description = "课程介绍 - 方法")
    private String introMethods;

    @Schema(description = "课程介绍 - 评估")
    private String introEvaluation;

    @Schema(description = "课程介绍 - 注意事项")
    private String introNotes;

    @Schema(description = "进度计划参考数据（JSON）")
    private String scheduleRefData;

    @Schema(description = "环境创设（步骤 7）")
    private String environmentConstruction;

    @Schema(description = "主题 ID")
    private Long themeId;

    @Schema(description = "绘本名称")
    private String pictureBookName;

    @Schema(description = "封面图片路径")
    private String coverImagePath;

    @Schema(description = "电子绘本路径（JSON 数组）")
    private String ebookPaths;

    @Schema(description = "音频资源路径（JSON 数组）")
    private String audioPaths;

    @Schema(description = "视频资源路径（JSON 数组）")
    private String videoPaths;

    @Schema(description = "其他资源（JSON 数组）")
    private String otherResources;

    @Schema(description = "PPT 课件路径")
    private String pptPath;

    @Schema(description = "PPT 课件名称")
    private String pptName;

    @Schema(description = "海报图片路径")
    private String posterPaths;

    @Schema(description = "教学工具")
    private String tools;

    @Schema(description = "学生材料")
    private String studentMaterials;

    @Schema(description = "教案数据（JSON）")
    private String lessonPlanData;

    @Schema(description = "活动数据（JSON）")
    private String activitiesData;

    @Schema(description = "评估数据（JSON）")
    private String assessmentData;

    @Schema(description = "年级标签（JSON 数组）")
    private String gradeTags;

    @Schema(description = "领域标签（JSON 数组）")
    private String domainTags;

    @Schema(description = "是否有集体课")
    private Integer hasCollectiveLesson;

    @Schema(description = "版本号")
    private String version;

    @Schema(description = "父版本 ID")
    private Long parentId;

    @Schema(description = "是否最新版本")
    private Integer isLatest;

    @Schema(description = "提交时间")
    private LocalDateTime submittedAt;

    @Schema(description = "提交人 ID")
    private Long submittedBy;

    @Schema(description = "审核时间")
    private LocalDateTime reviewedAt;

    @Schema(description = "审核人 ID")
    private Long reviewedBy;

    @Schema(description = "审核意见")
    private String reviewComment;

    @Schema(description = "审核检查清单")
    private String reviewChecklist;

    @Schema(description = "发布时间")
    private LocalDateTime publishedAt;

    @Schema(description = "使用次数")
    private Integer usageCount;

    @Schema(description = "教师数量")
    private Integer teacherCount;

    @Schema(description = "平均评分")
    private BigDecimal avgRating;

}
