// oms/src/models/doneRateModel.ts
import mongoose, { Document, Schema } from "mongoose";

// 定义 DoneRate 文档的 TypeScript 接口
export interface IDoneRate extends Document {
  date: string; // 日期（yyyyMMdd 字符串格式）
  res: mongoose.Types.ObjectId; // 作品 ID，关联到 Art 模型
  startCount: number; // 今日该作品点击进入填色的次数
  doneCount: number; // 今日该作品的完成数
  completionRate: number; // 完成率: 100 * doneCount / startCount
  createdAt: Date; // 创建时间 (由 timestamps 自动管理)
  updatedAt: Date; // 更新时间 (由 timestamps 自动管理)
}

// 定义 DoneRate Schema
const DoneRateSchema: Schema = new Schema(
  {
    date: {
      type: String,
      required: true,
      index: true, // 为日期添加索引，有助于按日期查询
      match: /^\d{8}$/, // 验证日期格式是否为 YYYYMMDD
    },
    res: {
      type: Schema.Types.ObjectId,
      ref: "Art", // 关联到 Art 模型
      required: true,
      index: true, // 为作品 ID 添加索引
    },
    startCount: {
      type: Number,
      required: true,
      default: 0,
      min: 0, // 确保开始次数不为负
    },
    doneCount: {
      type: Number,
      required: true,
      default: 0,
      min: 0, // 确保完成次数不为负
    },
    completionRate: {
      type: Number,
      required: true,
      default: 0,
      min: 0, // 完成率不为负
      // max: 100, // 完成率不超100 , 先不做这个限制了
    },
  },
  {
    timestamps: true, // 自动添加 createdAt 和 updatedAt 字段
  }
);

// 为 date 和 res 字段创建复合唯一索引
// 这确保了在给定日期，每个作品只有一条完成率记录
DoneRateSchema.index({ date: 1, res: 1 }, { unique: true });

// 创建并导出 DoneRate Model
const DoneRate = mongoose.model<IDoneRate>("DoneRate", DoneRateSchema);
export default DoneRate;
