package com.rc.httpcore.vo.response;

import java.io.Serializable;
import java.util.List;

/**
 * info
 *
 * @author ReiChin_
 */
public class ExamCourseVo implements Serializable {

    public String allCateTitle; // 课程分类（级联）
    public String title; // 课程名称
    public String cateTitle; // 分类标题
    public String chapters; // 章节数
    public String accessNum; // 访问人数
    public String createTime; // 创建时间
    public String duration; // 课程时长
    public String durationStr;
    public String durations; // 课程总时长
    public String durationsStr;


    public long learnDurations; //  用户学习总时长
    public String learnDurationStr;

    public String learns; // 学习人数
    public String type; // 课程类型
    public String id;

    public String updateTime; // 更新时间
    public String remark;
    public String deptId; // 题目ID
    public String deptName; // 部门名称
    public String userId; // 用户ID（数据权限）
    public String cateId; // 分类ID
    public String pri; // 是否公开
    public String level; // 等级
    public String orderRest; // 是否限制顺序
    public String label; // 课程标签
    public String effectiveTime; // PDF翻页有效时间
    public String ceType; // 课程有效时间类型
    public String ceTime; // 课程有效时间
    public String keywords; // 课程关键字
    public String img; // 封面图片
    public String description; // 课程简介
    public String status; // 课程状态 0 下架，1 上架
    public String videoDraggable; // 是否显示课程拖拽进度 0 不可拖拽
    public String points; // 积分值
    public String machinePoints; // 学习机积分值
    public String settings; // 设置选项
    public List<ChapterVo> chapterList;
    public String scopeType; // 适用范围(1. 安全准入考试，2. 负面清单考试，3. 黑名单考试)
    public String learnStatus; //  0 学习中，2 未学习，3 待考核，1 已完成

    public String decodeScopeType() {
        if (null == scopeType || scopeType.isEmpty()) {
            return "";
        }
        String[] array = scopeType.split(",");
        StringBuilder builder = new StringBuilder();
        for (String type : array) {
            builder.append(decodeScopeType(type)).append("、");
        }
        if (builder.length() > 0) {
            builder.deleteCharAt(builder.length() - 1);
        }
        return builder.toString();
    }

    private String decodeScopeType(String type) {
        if ("1".equals(type)) {
            return "安全准入考试";
        } else if ("2".equals(type)) {
            return "负面清单考试";
        } else if ("3".equals(type)) {
            return "黑名单考试";
        }
        return "";
    }

    public String decodeLearnStatus() {
        if ("0".equals(learnStatus)) {
            return "学习中";
        } else if ("1".equals(learnStatus)) {
            return "已完成";
        } else if ("2".equals(learnStatus)) {
            return "未学习";
        } else if ("3".equals(learnStatus)) {
            return "待考核";
        }
        return "";
    }

    public static class ChapterVo implements Serializable {
        public String createBy;
        public String createTime; // 创建时间
        public String updateBy;
        public String updateTime; // 更新时间
        public String remark;
        public String deptId; // 题目ID
        public String deptName; // 部门名称
        public String userId; // 用户ID（数据权限）
        public String id; // 章节ID
        public String courseId; // 课程ID
        public String title; // 标题
        public String parentId; // 父级ID
        public String position;
        public String resourcesId; // 关联资源ID
        public String chapterData; // 资源地址或上传的地址
        public String description; // 简介
        public String free; // 是否免费试读章节，0为收费，1为免费
        public String type; // 0 为目录 其他类型同课件类型 文件类型 1 文档，2 视频，3 图片，4 音频，5 富文本
        public String postfix; // 文件后缀
        public String allowdownload; // 允许下载资源
        public long duration; // 课件时长
        public String durationStr; // 课件时长
        public String learnStatus; // 学习状态 0 学习中，2 未学习，1 已完成
        public String hasChildren;
        public List<ChapterVo> children;

        public String isAssess; // 是否考核（0 否，1 是）
        public String assessName; // 考核名称
        public String assessStatus; // 考核状态 0 未完成，1 已完成
        public int hasAssess; // 考核次数

        /**
         * 该章节是否学习和考核都完成
         */
        public boolean chapterCompleted() {
            // 学习未完成
            if (!"1".equals(learnStatus)) return false;
            // 配置了考核，但是考核未通过
            if ("1".equals(isAssess) && !"1".equals(assessStatus)) return false;
            return true;
        }

        /**
         * 是否显示课后考核，①配置了课后考核；②并且课后考后未通过
         */
        public boolean showClassTest() {
            // 没有配置 >> 不显示
            if (!"1".equals(isAssess)) return false;
            // 有配置，考核通过 >> 不显示
            if ("1".equals(assessStatus)) return false;
            return true;
        }

        /**
         * 是否显示考试记录，①配置了考试；②考试次数大于0
         */
        public boolean showClassTestRecord() {
            return "1".equals(isAssess) && hasAssess > 0;
        }

        /**
         * 0 学习中，2 未学习，3 待考核，1 已完成
         */
        public int formatLearnStatus() {
            if ("0".equals(learnStatus)) return 0; // 学习中
            if ("1".equals(learnStatus)) {
                // 待考核(考核未完成)：配置了考核，但是考核未通过
                boolean isAssessing = "1".equals(isAssess) && !"1".equals(assessStatus);
                return isAssessing ? 3 : 1;
            } else return 2; // 未学习
        }

    }

}
