// oms/src/controllers/doneRateController.ts
import { Request, Response } from "express";
import doneRateService from "../services/doneRateService"; // 导入 DoneRateService
import mongoose from "mongoose"; // 导入 mongoose 用于验证 ObjectId

class DoneRateController {
  /**
   * 根据作品 ID 获取该作品的所有历史完成率数据。
   * GET /api/done-rates/artwork/:resId
   * @param req Express 请求对象
   * @param res Express 响应对象
   * @returns Promise<void>
   */
  public async getDoneRatesByArtworkId(req: Request, res: Response): Promise<void> {
    try {
      const { resId } = req.params; // 从 URL 参数获取作品 ID

      // 验证 resId 是否是有效的 MongoDB ObjectId
      if (!mongoose.Types.ObjectId.isValid(resId)) {
        res.status(400).json({ message: "Invalid artwork ID format." });
        return;
      }

      const doneRates = await doneRateService.getDoneRatesByArtwork(new mongoose.Types.ObjectId(resId));
      if (doneRates && doneRates.length > 0) {
        res.status(200).json(doneRates); // 返回作品的历史完成率数据
      } else {
        res.status(404).json({ message: `No done rates found for artwork ID: ${resId}.` });
      }
    } catch (error: any) {
      console.error("Failed to retrieve done rates by artwork ID:", error);
      res.status(500).json({ message: "Failed to retrieve done rates", error: error.message });
    }
  }

  /**
   * 根据特定日期获取该日所有作品的完成率数据。
   * GET /api/done-rates/date/:date
   * @param req Express 请求对象
   * @param res Express 响应对象
   * @returns Promise<void>
   */
  public async getDoneRatesByDate(req: Request, res: Response): Promise<void> {
    try {
      const { date } = req.params; // 从 URL 参数获取日期 (YYYYMMDD)

      // 验证日期格式 (YYYYMMDD)
      if (!/^\d{8}$/.test(date)) {
        res.status(400).json({ message: "Invalid date format. Expected YYYYMMDD." });
        return;
      }

      const doneRates = await doneRateService.getDoneRatesByDate(date);
      if (doneRates && doneRates.length > 0) {
        res.status(200).json(doneRates); // 返回指定日期的所有完成率数据
      } else {
        res.status(404).json({ message: `No done rates found for date: ${date}.` });
      }
    } catch (error: any) {
      console.error("Failed to retrieve done rates by date:", error);
      res.status(500).json({ message: "Failed to retrieve done rates", error: error.message });
    }
  }
}

const doneRateController = new DoneRateController();
export default doneRateController;
