package jnpf.model.cultivate.dto.course;

import cn.hutool.core.util.StrUtil;
import jnpf.model.cultivate.dto.course.testoption.FtbCultivateChapterTestDTO;
import jnpf.model.cultivate.dto.course.testoption.FtbCultivateChapterTestOptionDTO;
import jnpf.model.cultivate.po.course.FtbCultivateCourseChapter;
import lombok.Data;
import lombok.EqualsAndHashCode;

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

/**
* 课程章节入参
 */
@Data
public class FtbCultivateCourseChapterDTO {
    /**
     * 课程主键ID
     */
    @NotBlank(message = "课程主键ID不能为空")
    private String courseId;

    /**
     * 章节名称
     */
    @NotBlank(message = "章节名称不能为空")
    private String name;

    /**
     * 排序码,1,2,3
     */
    @NotNull(message = "排序码不能为空")
    private Integer sortCode;

    /**
     * 附件地址，多个用逗号隔开
     */
    private String annex;

    /**
     * 附件名称，多个用逗号隔开
     */
    private String annexName;

    /**
     * 详细描述
     */
    private String detailDesc;

    /**
     * 时长如果为音频或视频时，需要插入（秒）
     */
    private Integer duration;

    /**
     * 是否开启随堂测试,0开启，1不开启
     */
    private Integer whetherTesting;

    /**
     * 图文格式最短学习时长设置，单位秒
     */
    private Integer forcedStudy;

    /**
     * 随堂测试
     */
    private List<FtbCultivateChapterTestAddDTO> cultivateChapterTest;

    /**
     * 课件类型，0文档，1图片，2视频，3音频
     */
    private Integer chapterType;

    /**
     * 资料库id
     */
    private String libraryId;

    @EqualsAndHashCode(callSuper = true)
    @Data
    public static class FtbCultivateChapterTestAddDTO extends FtbCultivateChapterTestDTO {
        /**
         * 选项内容
         */
        private List<FtbCultivateChapterTestOptionDTO> fetchChapterTestOptions;
    }

    public FtbCultivateCourseChapter convertFtbCultivateCourseChapter(FtbCultivateCourseChapterDTO ftbCultivateCourseChapterDTO) {
        if (ftbCultivateCourseChapterDTO == null) {
            return null;
        }
        if (StrUtil.isBlank(ftbCultivateCourseChapterDTO.getAnnex()) && StrUtil.isBlank(ftbCultivateCourseChapterDTO.getDetailDesc())) {
            throw new RuntimeException("请添加章节学习内容！");
        }
        FtbCultivateCourseChapter ftbCultivateCourseChapter = new FtbCultivateCourseChapter();
        ftbCultivateCourseChapter.setCourseId(ftbCultivateCourseChapterDTO.getCourseId());
        ftbCultivateCourseChapter.setName(ftbCultivateCourseChapterDTO.getName());
        ftbCultivateCourseChapter.setSortCode(ftbCultivateCourseChapterDTO.getSortCode());
        ftbCultivateCourseChapter.setAnnex(ftbCultivateCourseChapterDTO.getAnnex());
        ftbCultivateCourseChapter.setAnnexName(ftbCultivateCourseChapterDTO.getAnnexName());
        ftbCultivateCourseChapter.setDetailDesc(ftbCultivateCourseChapterDTO.getDetailDesc());
        ftbCultivateCourseChapter.setDuration(ftbCultivateCourseChapterDTO.getDuration());
        ftbCultivateCourseChapter.setWhetherTesting(ftbCultivateCourseChapterDTO.getWhetherTesting());
        ftbCultivateCourseChapter.setForcedStudy(ftbCultivateCourseChapterDTO.getForcedStudy());
        ftbCultivateCourseChapter.setChapterType(ftbCultivateCourseChapterDTO.getChapterType());
        ftbCultivateCourseChapter.setLibraryId(ftbCultivateCourseChapterDTO.getLibraryId());
        return ftbCultivateCourseChapter;
    }

    public void audioAndVideoVerification(Integer format, FtbCultivateCourseChapterDTO ftbCultivateCourseDTO) {
        // 1视频，2音频
        if (format == 2 && Objects.nonNull(ftbCultivateCourseDTO.getForcedStudy())) {
            if (ftbCultivateCourseDTO.getForcedStudy() < 10) {
                throw new RuntimeException("最短学习总时长不能小于10秒");
            }
            if (ftbCultivateCourseDTO.getDuration() < ftbCultivateCourseDTO.getForcedStudy()) {
                throw new RuntimeException("最短学习时长设置不能超过音频总时长");
            }
        }
        if (format == 1) {
            // 随堂测试校验
            FtbCultivateChapterTestDTO.checkCourseChapterTestAdd(ftbCultivateCourseDTO);
            // 总时长校验
            FtbCultivateChapterTestDTO.checkForcedStudy(ftbCultivateCourseDTO.getCultivateChapterTest(), ftbCultivateCourseDTO.getDuration());
        }
    }

}