package jnpf.model.cultivate.v2.course.vo.app;

import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.annotation.TableField;
import jnpf.model.cultivate.vo.chapter.FtbCultivateChapterTestResultVO;
import lombok.Data;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Data
public class V2ChapterAppDetails {
    /**
     * 章节id
     */
    private String id;
    /**
     * 课程主键ID
     */
    private String courseId;

    /**
     * 章节名称
     */
    private String name;

    /**
     * 排序码,1,2,3
     */
    private Integer sortCode;

    /**
     * 附件地址
     */
    private String annex;

    /**
     * 附件名称
     */
    private String annexName;

    /**
     * 视频方向： 1-竖屏 2-横屏
     */
    private Integer videoActionType;

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

    /**
     * 时长如果为音频或视频时，需要插入（秒）
     */
    private Integer duration;
    /**
     * 是否有效
     */
    private Integer enableMark;
    /**
     * 上一章节id
     */
    private String preId;
    /**
     * 下一章节id
     */
    private String nextId;

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

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

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

    /**
     * 父级ID,0-顶层
     */
    private String parentId;

    /**
     * 层级路径，例如：1-2-3
     */
    private String path;

    /**
     * 来源：0-本地上传，1-资料库
     */
    private Integer source;


    /**
     * 用户学习状态 1已学习，0未学习
     */
    private Integer state;
    /**
     * 用户章节学习时长,单位秒
     */
    private Integer chapterTime;

    /**
     * 文件大小,多个逗号分开
     */
    private String size;

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

    /**
     * 上一次视频学习时长
     */
    private Long lastVideoStudyTime;


    /**
     * 随堂测试
     */
    private List<V2CultivateChapterTestDto> chapterTestDtoList;

    /**
     * 用户章节测试结果
     */
    private List<FtbCultivateChapterTestResultVO> userTestResultList;

    /**
     * 获取章节树中指定章节的上一个和下一个章节ID
     *
     * @param chapterTree 章节树
     * @param chapterId   目标章节ID
     * @return 包含上一个和下一个章节ID的Map
     */
    public static Map<String, String> lineVo(List<V2ChapterVo> chapterTree, String chapterId) {
        Map<String, String> findMap = new HashMap<>();
        findMap.put("preId", "");
        findMap.put("nextId", "");
        List<String> result = new ArrayList<>();
        flattenChapterTree(chapterTree, result);
        // 查找目标章节的索引
        int targetIndex = result.indexOf(chapterId);
        if (targetIndex == -1) {
            return findMap;
        }

        // 获取上一个和下一个章节ID
        String previousChapterId = (targetIndex > 0) ? result.get(targetIndex - 1) : null;
        String nextChapterId = (targetIndex < result.size() - 1) ? result.get(targetIndex + 1) : null;

        findMap.put("preId", previousChapterId);
        findMap.put("nextId", nextChapterId);
        return findMap;
    }


    /**
     * 递归将章节树展平为列表
     *
     * @param chapterTree 章节树
     * @param result      结果列表
     */
    private static void flattenChapterTree(List<V2ChapterVo> chapterTree, List<String> result) {
        for (V2ChapterVo chapter : chapterTree) {
            result.add(chapter.getId()); // 添加当前章节ID
            if (CollUtil.isNotEmpty(chapter.getChild())) {
                flattenChapterTree(chapter.getChild(), result); // 递归处理子章节
            }
        }
    }
}
