import type { ApplicationFormState } from "@/components/applicant/initiativeFormTypes";
import type { EvidenceBundle } from "@/lib/applicationEvidenceApi";
import type { ReviewDraftTabs } from "@/components/admin/review/buildInitiativeDraftFromReviewTabs";

/**
 * Gộp tab Đơn từ bản xem lại hồ sơ (JSON đã lưu) để so khớp với API minh chứng.
 */
export function mergeApplicationTabForReview(tabs: ReviewDraftTabs | undefined): Partial<ApplicationFormState> {
  return (tabs?.application ?? {}) as Partial<ApplicationFormState>;
}

/**
 * Các điểm cần lưu ý trước khi duyệt: khớp mẫu DOCX / đủ minh chứng trên kho.
 */
export function collectDocxTemplateCompletenessGaps(
  tabs: ReviewDraftTabs | undefined,
  bundle: EvidenceBundle | null,
): string[] {
  const gaps: string[] = [];
  const app = mergeApplicationTabForReview(tabs);
  const name = String(app.initiativeName ?? "").trim();
  if (!name) gaps.push("Thiếu tên sáng kiến trên Đơn — mẫu DOCX có thể không đầy đủ.");

  const authors = app.authors;
  if (!Array.isArray(authors) || authors.length === 0) {
    gaps.push("Thiếu danh sách tác giả trên Đơn.");
  }

  const classification = app.initiativeClassification ?? null;
  if (!classification) {
    gaps.push("Chưa chọn phân loại sáng kiến (Nhóm 1 / 2.1 / 2.2).");
    return gaps;
  }

  if (!bundle) {
    gaps.push("Chưa tải được trạng thái kho minh chứng — không kiểm tra được tệp bắt buộc.");
    return gaps;
  }

  if (classification === "research" && (!bundle.research || !String(bundle.research.storageKey ?? "").trim())) {
    gaps.push("Nhóm 2.1: chưa có minh chứng nghiên cứu trên kho.");
  }
  if (classification === "textbook" && (!bundle.textbook || !String(bundle.textbook.storageKey ?? "").trim())) {
    gaps.push("Nhóm 2.2: chưa có minh chứng sách / giáo trình trên kho.");
  }
  if (classification === "technical" && (!bundle.technical || !String(bundle.technical.storageKey ?? "").trim())) {
    gaps.push("Nhóm 1: chưa có minh chứng đơn vị / kỹ thuật trên kho.");
  }

  return gaps;
}
