// 구매품표준관리 카테고리 매핑
// procurement_standard.category 실제 DB 값 ↔ alias(CODE1~5) ↔ 자릿수/정규식 룰
// 원본 FITO: code1RegistFormPopUp.jsp fnc_validateCodeID 참조

export type StdCategoryAlias = "CODE1" | "CODE2" | "CODE3" | "CODE4" | "CODE5";

export interface StdCategoryDef {
  alias: StdCategoryAlias;
  category: string;        // DB PROCUREMENT_STANDARD.CATEGORY
  label: string;           // 한글 명
  codeLength: number;      // CODE_ID 자릿수
  codeType: "alpha" | "numeric";  // A-Z 또는 0-9
  codeDesc: string;        // 검증 실패 안내 문구
  showDetail: boolean;     // 상세내용 필드 노출 (대분류만 true)
}

export const STD_CATEGORIES: Record<StdCategoryAlias, StdCategoryDef> = {
  CODE1: { alias: "CODE1", category: "0001668", label: "대분류",   codeLength: 1, codeType: "alpha",   codeDesc: "1자리 영어 대문자", showDetail: true  },
  CODE2: { alias: "CODE2", category: "0001669", label: "중분류",   codeLength: 3, codeType: "alpha",   codeDesc: "3자리 영어 대문자", showDetail: false },
  CODE3: { alias: "CODE3", category: "0001670", label: "Maker",    codeLength: 2, codeType: "alpha",   codeDesc: "2자리 영어 대문자", showDetail: false },
  CODE4: { alias: "CODE4", category: "0001671", label: "품명",     codeLength: 3, codeType: "numeric", codeDesc: "3자리 숫자",        showDetail: false },
  CODE5: { alias: "CODE5", category: "0001672", label: "규격",     codeLength: 4, codeType: "numeric", codeDesc: "4자리 숫자",        showDetail: false },
};

export function getStdCategoryByAlias(alias: string): StdCategoryDef | undefined {
  return STD_CATEGORIES[alias as StdCategoryAlias];
}

export function getStdCategoryByCategory(category: string): StdCategoryDef | undefined {
  return Object.values(STD_CATEGORIES).find((c) => c.category === category);
}

export function validateStdCodeId(alias: string, codeId: string): { ok: boolean; message?: string } {
  const def = getStdCategoryByAlias(alias);
  if (!def) return { ok: false, message: "카테고리가 올바르지 않습니다." };
  if (codeId.length !== def.codeLength) {
    return { ok: false, message: `${def.label} 코드는 ${def.codeDesc}만 입력 가능합니다.` };
  }
  const regex = def.codeType === "alpha" ? /^[A-Z]+$/ : /^[0-9]+$/;
  if (!regex.test(codeId)) {
    return { ok: false, message: `${def.label} 코드는 ${def.codeDesc}만 입력 가능합니다.` };
  }
  return { ok: true };
}
