package jnpf.model.cultivate.v2.course.web.req;

import cn.hutool.core.collection.CollUtil;
import jnpf.model.cultivate.v2.course.vo.app.V2CultivateChapterTestAddDTO;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;
import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;

@Data
public class V2CultivateCourseReq {

    /**
     * 主键Id
     */
    private String id;
    /**
     * 课程名称
     */
    @NotBlank(message = "课程名称不能为空")
    @Length(max = 50, message = "课程名称不能超过50字")
    private String name;

    /**
     * 课程亮点
     */
    @Length(max = 200, message = "课程亮点不能超过200字")
    private String highLights;

    /**
     * 课程类型（1-全局课程，2-岗位学习课程）
     */
    @NotNull(message = "课程类型不能为空")
    private Integer label;

    /**
     * 课程标签Id
     */
    @NotBlank(message = "请选择课程标签")
    private String typeId;

    /**
     * 任务封面Id
     */
    private String coverId;

    /**
     * 课程封面
     */
    private String coverUrl;


    /**
     * 是否需要考试和鉴定（0-不需要，1-需要）
     */
    private Integer needExamAndIdentify;

    /**
     * 绑定的考试ID
     */
    private String examId;

    /**
     * 绑定的鉴定ID
     */
    private String identifyId;


    private List<V2CultivateCourseChapterReq> chapterReqList;


    public void validateCourseParams() {
        // 验证课程章节参数
        if (CollUtil.isEmpty(this.getChapterReqList())) {
            throw new RuntimeException("请添加课程章节");
        }
        validateCourseChapterParams(this.getChapterReqList(), 0);
    }


    /**
     * 验证课程章节参数
     *
     * @param chapterList 章节列表
     * @param level       当前层级（用于防止无限递归）
     */
    private void validateCourseChapterParams(List<V2CultivateCourseChapterReq> chapterList, int level) {
        if (chapterList == null || chapterList.isEmpty()) {
            return;
        }
        // 防止无限递归，限制最大层级数
        if (level > 3) {
            throw new RuntimeException("章节层级过深，最多支持3级");
        }

        for (int i = 0; i < chapterList.size(); i++) {
            V2CultivateCourseChapterReq chapter = chapterList.get(i);

            // 验证章节名称
            if (StringUtils.isEmpty(chapter.getName())) {
                throw new RuntimeException("第" + (i + 1) + "个章节名称不能为空");
            }

            // 验证排序码
            if (chapter.getSortCode() == null) {
                throw new RuntimeException("第" + (i + 1) + "个章节的排序码不能为空");
            }

            // 验证章节内容（附件或详细描述至少有一个）
            if (StringUtils.isEmpty(chapter.getAnnex())) {
                throw new RuntimeException("第" + (i + 1) + "个章节请添加章节学习内容！");
            }

            if (chapter.getWhetherTesting() != null && chapter.getWhetherTesting().equals(0)) {
                if (CollUtil.isEmpty(chapter.getCultivateChapterTest())) {
                    throw new RuntimeException("第" + (i + 1) + "个章节请添加随堂测试！");
                }
                // 验证随堂测试
                for (int j = 0; j < chapter.getCultivateChapterTest().size(); j++) {
                    V2CultivateChapterTestAddDTO test = chapter.getCultivateChapterTest().get(j);
                    if (StringUtils.isEmpty(test.getTopicName())) {
                        throw new RuntimeException("第" + (i + 1) + "个章节的第" + (j + 1) + "个随堂测试题目不能为空");
                    }
                    if (CollUtil.isEmpty(test.getFetchChapterTestOptions())) {
                        throw new RuntimeException("第" + (i + 1) + "个章节的第" + (j + 1) + "个随堂测试请添加选项！");
                    }
                    // 验证测试选项
                    for (int k = 0; k < test.getFetchChapterTestOptions().size(); k++) {
                        var option = test.getFetchChapterTestOptions().get(k);
                        if (StringUtils.isEmpty(option.getContent())) {
                            throw new RuntimeException("第" + (i + 1) + "个章节的第" + (j + 1) + "个随堂测试的第" + (k + 1) + "个选项内容不能为空");
                        }
                    }
                }
            }

            // 递归验证子章节
            if (chapter.getChildChapter() != null) {
                validateCourseChapterParams(chapter.getChildChapter(), level + 1);
            }
        }
    }
}