/**
 * Phiếu đề xuất — 4 loại theo yêu cầu: mở lớp chuyển giao, khuyến mãi, quà tặng, khác.
 * Mỗi loại có vài trường riêng (lưu ở `proposals.details.values`, kiểu chuỗi) để phiếu có cấu trúc thay vì chỉ một khung chữ tự do.
 * Không import gì từ tầng cơ sở dữ liệu nên dùng được ở cả máy chủ lẫn trình duyệt.
 */
export type ProposalFieldKind = "text" | "textarea" | "date" | "number" | "money" | "course" | "customer";

export type ProposalField = {
  key: string;
  label: string;
  kind: ProposalFieldKind;
  required?: boolean;
  placeholder?: string;
};

export type ProposalTypeKey = "TRAINING" | "PROMOTION" | "GIFT" | "OTHER";

export const PROPOSAL_TYPES: readonly { key: ProposalTypeKey; label: string; hint: string; fields: ProposalField[] }[] = [
  {
    key: "TRAINING",
    label: "Đề xuất mở lớp chuyển giao",
    hint: "Mở một lớp chuyển giao (quy trình sử dụng sản phẩm) cho khách hàng.",
    fields: [
      { key: "course", label: "Khoá chuyển giao", kind: "course", required: true },
      { key: "date", label: "Thời gian dự kiến", kind: "date", required: true },
      { key: "place", label: "Địa điểm / hình thức", kind: "text", placeholder: "Trực tiếp tại showroom, trực tuyến…" },
      { key: "attendees", label: "Số học viên dự kiến", kind: "number" },
      { key: "cost", label: "Chi phí dự kiến (VNĐ)", kind: "money" },
    ],
  },
  {
    key: "PROMOTION",
    label: "Đề xuất khuyến mãi",
    hint: "Chương trình khuyến mãi cho sản phẩm hoặc nhóm khách hàng.",
    fields: [
      { key: "target", label: "Sản phẩm / nhóm sản phẩm áp dụng", kind: "text", required: true },
      { key: "offer", label: "Nội dung khuyến mãi", kind: "textarea", required: true, placeholder: "Mua 10 tặng 1, giảm 5% cho đơn từ 20 triệu…" },
      { key: "audience", label: "Đối tượng khách áp dụng", kind: "text", placeholder: "Đại lý hạng A, khách khu vực miền Nam…" },
      { key: "from", label: "Áp dụng từ ngày", kind: "date" },
      { key: "to", label: "Đến ngày", kind: "date" },
      { key: "cost", label: "Giá trị / chi phí dự kiến (VNĐ)", kind: "money" },
    ],
  },
  {
    key: "GIFT",
    label: "Đề xuất quà tặng",
    hint: "Tặng quà cho khách hàng (chăm sóc, tri ân, sự kiện).",
    fields: [
      { key: "customer", label: "Khách hàng nhận quà", kind: "customer" },
      { key: "gift", label: "Quà tặng", kind: "text", required: true, placeholder: "Bộ quà Tết, voucher…" },
      { key: "cost", label: "Giá trị quà (VNĐ)", kind: "money" },
    ],
  },
  {
    key: "OTHER",
    label: "Đề xuất khác",
    hint: "Mọi đề xuất không thuộc ba loại trên — ghi rõ trong tiêu đề và nội dung.",
    fields: [],
  },
];

export const PROPOSAL_TYPE_LABEL: Record<string, string> = Object.fromEntries(PROPOSAL_TYPES.map((t) => [t.key, t.label]));

export function proposalType(key: string | null | undefined) {
  return PROPOSAL_TYPES.find((t) => t.key === key);
}

export type ProposalDetails = {
  type: ProposalTypeKey;
  values: Record<string, string>;
  /** Người đề xuất thu hồi phiếu (phiếu được GIỮ LẠI làm hồ sơ, không xoá) — ISO thời điểm thu hồi. */
  withdrawnAt?: string;
};

/** Nhãn hiển thị của một giá trị trường (tiền có dấu chấm, ngày dd/mm/yyyy). */
export function displayFieldValue(field: ProposalField, value: string): string {
  if (!value) return "";
  if (field.kind === "money") return `${Number(value).toLocaleString("vi-VN")} đ`;
  if (field.kind === "date") {
    const [y, m, d] = value.split("-");
    return y && m && d ? `${d}/${m}/${y}` : value;
  }
  return value;
}

/** Bước duyệt theo yêu cầu: Người đề xuất → Trưởng bộ phận → Trưởng bộ phận liên quan → TGĐ. */
export const STEP_LABEL = {
  head: "Trưởng bộ phận",
  related: "Trưởng bộ phận liên quan",
  extra: "Người duyệt thêm",
  director: "TGĐ",
} as const;
