package com.lesingle.edu.common.enums;

import lombok.Getter;

/**
 * 日志操作模块枚举
 * <p>
 * 用于 @Log 注解的 module 参数赋值，统一管理操作日志的模块名称
 * </p>
 *
 * @author reading-platform
 * @since 2026-03-23
 */
@Getter
public enum LogModule {

    /**
     * 认证管理
     */
    AUTH("认证管理"),

    /**
     * 文件管理
     */
    FILE("文件管理"),

    /**
     * 班级管理
     */
    CLASS("班级管理"),

    /**
     * 教师管理
     */
    TEACHER("教师管理"),

    /**
     * 学生管理
     */
    STUDENT("学生管理"),

    /**
     * 家长管理
     */
    PARENT("家长管理"),

    /**
     * 排课管理
     */
    SCHEDULE("排课管理"),

    /**
     * 任务管理
     */
    TASK("任务管理"),

    /**
     * 任务模板
     */
    TASK_TEMPLATE("任务模板"),

    /**
     * 任务评价
     */
    TASK_FEEDBACK("任务评价"),

    /**
     * 套餐管理
     */
    PACKAGE("套餐管理"),

    /**
     * 成长记录
     */
    GROWTH("成长记录"),

    /**
     * 数据导出
     */
    EXPORT("数据导出"),

    /**
     * 通知管理
     */
    NOTIFICATION("通知管理"),

    /**
     * 课程套餐管理
     */
    COURSE_COLLECTION("课程套餐管理"),

    /**
     * 课程包管理
     */
    COURSE_PACKAGE("课程包管理"),

    /**
     * 课程环节管理
     */
    COURSE_LESSON("课程环节管理"),

    /**
     * 资源库管理
     */
    COURSE_RESOURCE("资源库管理"),

    /**
     * 主题管理
     */
    THEME("主题管理"),

    /**
     * 租户管理
     */
    TENANT("租户管理"),

    /**
     * 系统设置
     */
    SYSTEM_SETTING("系统设置"),

    /**
     * 课时管理
     */
    LESSON("课时管理"),

    /**
     * 课时反馈
     */
    LESSON_FEEDBACK("课时反馈"),

    /**
     * 学生记录
     */
    STUDENT_RECORD("学生记录"),

    /**
     * 其他（未分类的模块）
     */
    OTHER("其他");

    private final String description;

    LogModule(String description) {
        this.description = description;
    }

    /**
     * 重写 toString 方法，返回描述文字
     * 这样可以直接使用枚举值作为字符串存储到数据库
     */
    @Override
    public String toString() {
        return this.description;
    }

    /**
     * 根据 description 获取枚举
     *
     * @param description 模块描述
     * @return 日志操作模块枚举
     */
    public static LogModule fromDescription(String description) {
        for (LogModule module : values()) {
            if (module.description.equals(description)) {
                return module;
            }
        }
        // 找不到返回 null，表示未知的模块
        return null;
    }
}
