
import { BaseDTO } from '../base';
import { AchievementEventType } from '../enums';

/**
 * 成就实体
 */
export interface Achievement extends BaseDTO {
    /** 成就唯一标识 */
    achievementID?: string;
    /** 成就名称 */
    name?: string;
    /** 成就描述 */
    description?: string;
    /** 成就图标 */
    icon?: string;
    /** 成就类型（1勋章 2等级） */
    type?: number;
    /** 成就等级 */
    level?: number;
    /** 获取条件类型（1学习时长 2资源数量 3课程数量 4连续学习天数） */
    conditionType?: number;
    /** 条件值 */
    conditionValue?: number;
    /** 获得积分 */
    points?: number;
    /** 排序号 */
    orderNum?: number;
    /** 创建者 */
    creator?: string;
    /** 更新者 */
    updater?: string;
  }
  
  /**
   * 用户成就实体
   */
  export interface UserAchievement extends BaseDTO {
    /** 用户ID */
    userID?: string;
    /** 成就ID */
    achievementID?: string;
    /** 获得时间 */
    obtainTime?: string;
  }
  
  /**
   * 用户成就进度实体
   */
  export interface UserAchievementProgress extends BaseDTO {
    /** 用户ID */
    userID?: string;
    /** 成就ID */
    achievementID?: string;
    /** 当前进度值 */
    currentValue?: number;
    /** 目标进度值 */
    targetValue?: number;
    /** 进度百分比 (0-100) */
    progressPercentage?: number;
    /** 是否已完成 */
    completed?: boolean;
    /** 最后更新时间 */
    lastUpdateTime?: string;
  }
  
  /**
   * 成就视图对象 - 包含成就信息、获得状态和进度信息
   */
  export interface AchievementVO extends Achievement {
    // ==================== 用户成就表的字段 ====================
    /** 用户成就记录ID */
    userAchievementID?: string;
    /** 用户ID */
    userID?: string;
    /** 获得时间 */
    obtainTime?: string;
    
    // ==================== 成就进度表的字段 ====================
    /** 进度记录ID */
    progressID?: string;
    /** 当前进度值 */
    currentValue?: number;
    /** 目标进度值 */
    targetValue?: number;
    /** 进度百分比 (0-100) */
    progressPercentage?: number;
    /** 是否已完成 */
    completed?: boolean;
    /** 最后更新时间 */
    lastUpdateTime?: string;
    
    // ==================== 扩展字段 ====================
    /** 是否已获得该成就 */
    obtained?: boolean;
  }

  /**
   * 成就事件实体
   * 用于触发成就检测和授予
   * @since 2025-10-24
   */
  export interface AchievementEvent {
    /** 用户ID */
    userID: string;
    /** 事件类型 */
    eventType: AchievementEventType;
    /** 事件值（如学习时长、资源数量等） */
    eventValue?: number;
    /** 事件时间 */
    eventTime?: string;
    /** 额外数据 */
    extraData?: Record<string, any>;
  }