import type { ApplicationFormState } from "@/components/applicant/initiativeFormTypes";

export type ApplicationMeritCategoryHint = {
  /** Mã mục con trên Đơn (ví dụ 2.1.1); nhóm sách/giáo trình lưu mã nội bộ 2.2.1 — nhãn hiển thị dùng {@link formatApplicationSubgroupLabel}. */
  subgroupCode: string | null;
  /**
   * Theo hướng dẫn nội bộ: 2.1.1–2.1.2 và 2.2.1 (sách/giáo trình) → xuất sắc; 2.1.3, 2.2.2 → khá; 2.1.4 → trung bình.
   * Nhóm 1 hoặc thiếu dữ liệu → null.
   */
  meritLevel: "xuất sắc" | "khá" | "trung bình" | null;
  /** Mô tả ngắn loại minh chứng / trạng thái (hiển thị cùng gợi ý mức). */
  detail: string;
};

/**
 * Gợi ý hạng mức (xuất sắc / khá / trung bình) theo nhóm minh chứng trên Đơn.
 */
export function getApplicationMeritCategoryHint(
  application: Pick<
    ApplicationFormState,
    "initiativeClassification" | "researchEvidenceKind" | "textbookEvidenceKind"
  >,
): ApplicationMeritCategoryHint {
  const c = application.initiativeClassification;
  const k = application.researchEvidenceKind;
  const tb = application.textbookEvidenceKind;

  if (c === "technical") {
    return {
      subgroupCode: "1",
      meritLevel: null,
      detail: "Nhóm 1 — minh chứng áp dụng kỹ thuật / đơn vị (không áp dụng nhãn xuất sắc / khá theo nhóm 2.x).",
    };
  }

  if (c === "research") {
    if (k === "international") {
      return {
        subgroupCode: "2.1.1",
        meritLevel: "xuất sắc",
        detail: "Bài báo tạp chí quốc tế.",
      };
    }
    if (k === "domestic") {
      return {
        subgroupCode: "2.1.2",
        meritLevel: "xuất sắc",
        detail: "Bài báo tạp chí trong nước.",
      };
    }
    if (k === "poster") {
      return {
        subgroupCode: "2.1.3",
        meritLevel: "khá",
        detail: "Poster / báo cáo hội nghị có phản biện.",
      };
    }
    if (k === "poster-without-review") {
      return {
        subgroupCode: "2.1.4",
        meritLevel: "trung bình",
        detail: "Poster / báo cáo hội nghị không phản biện.",
      };
    }
    return {
      subgroupCode: null,
      meritLevel: null,
      detail: "Nhóm 2.1 — chưa chọn loại minh chứng trên Đơn.",
    };
  }

  if (c === "textbook") {
    if (tb === "book") {
      return {
        subgroupCode: "2.2.1",
        meritLevel: "xuất sắc",
        detail: "Sách, giáo trình.",
      };
    }
    if (tb === "reference") {
      return {
        subgroupCode: "2.2.2",
        meritLevel: "khá",
        detail: "Tài liệu tham khảo.",
      };
    }
    return {
      subgroupCode: null,
      meritLevel: null,
      detail: "Nhóm 2.2 — chưa chọn loại minh chứng trên Đơn.",
    };
  }

  return {
    subgroupCode: null,
    meritLevel: null,
    detail: "Chưa có phân loại sáng kiến (Nhóm 1 / 2.1 / 2.2) trên Đơn.",
  };
}

/** Nhãn «Mục Đơn» trong UI admin — mục sách/giáo trình hiển thị là Xuất sắc (thay mã 2.2.1). */
export function formatApplicationSubgroupLabel(subgroupCode: string | null): string | null {
  if (subgroupCode == null || subgroupCode === "") return null;
  if (subgroupCode === "2.2.1") return "Xuất sắc";
  return subgroupCode;
}
