package com.red.circle.other.domain.ranking;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 排行榜周期类型枚举
 */
@Getter
@AllArgsConstructor
public enum RankingCycleType {

    /**
     * 日榜
     * 
     * cycleKey 格式: yyyyMMdd
     * 示例: 20250101
     */
    DAILY(1, "日榜", "yyyyMMdd"),

    /**
     * 周榜
     * 
     * cycleKey 格式: yyyyMMdd（周一日期）
     * 示例: 20250101（2025年第1周的周一）
     */
    WEEKLY(2, "周榜", "yyyyMMdd"),

    /**
     * 月榜
     * 
     * cycleKey 格式: yyyyMM
     * 示例: 202501
     */
    MONTHLY(3, "月榜", "yyyyMM"),

    /**
     * 赛季榜（自定义周期）
     * 
     * cycleKey 格式: yyyyMMdd-yyyyMMdd
     * 示例: 20250101-20250331（Q1 赛季）
     */
    SEASON(4, "赛季榜", "yyyyMMdd-yyyyMMdd"),

    /**
     * 年榜
     * 
     * cycleKey 格式: yyyy
     * 示例: 2025
     */
    YEARLY(5, "年榜", "yyyy"),

    /**
     * 总榜（不限周期）
     * 
     * cycleKey 格式: all
     */
    ALL_TIME(6, "总榜", "all");

    /**
     * 类型编码
     */
    private final Integer code;

    /**
     * 类型名称
     */
    private final String name;

    /**
     * cycleKey 格式
     */
    private final String keyFormat;

    /**
     * 根据编码获取枚举
     */
    public static RankingCycleType getByCode(Integer code) {
        if (code == null) {
            return null;
        }
        for (RankingCycleType type : values()) {
            if (type.getCode().equals(code)) {
                return type;
            }
        }
        return null;
    }

    /**
     * 判断是否是有效的周期类型
     */
    public static boolean isValid(Integer code) {
        return getByCode(code) != null;
    }
}