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

import lombok.Data;

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

/**
 * 用户学习情况VO
 *
 * @author AI Assistant
 * @date 2026-05-07
 */
@Data
public class UserLearningStatusVo implements Serializable {
    private static final long serialVersionUID = 1L;

    /**
     * 用户ID
     */
    private String userId;

    /**
     * 已完成的课程列表（去重）
     */
    private List<CourseInfo> completedCourses;

    /**
     * 已完成的考试列表（去重）
     */
    private List<ExamInfo> completedExams;

    /**
     * 已完成的鉴定列表（去重）
     */
    private List<IdentityInfo> completedIdentities;

    /**
     * 课程信息
     */
    @Data
    public static class CourseInfo implements Serializable {
        private static final long serialVersionUID = 1L;

        /**
         * 课程ID
         */
        private String courseId;

        /**
         * 课程名称
         */
        private String courseName;

        /**
         * 学习状态（1已学习，0未学习，2学习中）
         */
        private Integer state;

        /**
         * 学习时长（秒）
         */
        private Integer learnTime;
    }

    /**
     * 考试信息
     */
    @Data
    public static class ExamInfo implements Serializable {
        private static final long serialVersionUID = 1L;

        /**
         * 考试ID
         */
        private String examId;

        /**
         * 考试名称
         */
        private String examName;

        /**
         * 考试状态（0待考试，1待批阅，2已逾期，3合格，4不合格，5优秀）
         */
        private Integer status;

        /**
         * 得分
         */
        private Integer score;

        /**
         * 完成时间
         */
        private java.util.Date finishTime;
    }

    /**
     * 鉴定信息
     */
    @Data
    public static class IdentityInfo implements Serializable {
        private static final long serialVersionUID = 1L;

        /**
         * 鉴定表ID
         */
        private String tableId;

        /**
         * 鉴定名称
         */
        private String identityName;

        /**
         * 鉴定状态（0待鉴定，1已鉴定，2逾期未鉴定）
         */
        private Integer status;

        /**
         * 鉴定结果（0合格，1优秀，2不合格）
         */
        private Integer result;

        /**
         * 鉴定时间
         */
        private java.util.Date identifyTime;
    }
}
