import { formatCommonCode, type CommonCode } from '@/lib/domain/common-code';
/**
 * 백엔드 `TB_COM_VOUCHER`(`/api/v1/mngr/voc/**`) 한 행. 필드 이름이 화면 용어와 달라
 * Repository가 옮긴다 — `frcsNo`=코드, `frcsNm`=가맹점명, `brno`=사업자번호,
 * `rprsvNm`=대표자명, `rprsvTelno`=전화번호, `frcsPostAddr`/`frcsDaddr`=주소/상세주소.
 */
export interface Merchant {
  id: string;
  /** `frcsNo` — 서버가 만든다. 수정 불가(기획 MCH_003_p ①). */
  code: string;
  /**
   * 아래 넷은 백엔드 `TB_COM_VOUCHER`에 컬럼이 없어 **항상 빈 값**이다. 기획 시안에 있는
   * 항목이라 화면에서는 지우지 않고 값이 없을 때 `-`로 보여준다(사용자 확정).
   */
  brandName: string;
  memo: string;
  createdAt: string;
  updatedAt: string;
  name: string;
  categoryCode: string;
  businessNumber: string;
  ownerName: string;
  phoneNumber: string;
  address: string;
  addressDetail: string;
  postalCode: string;
  latitude: string;
  longitude: string;
  /** 백엔드 `useYn`. develop 목록엔 없어 `null`(모름)이고 feature/voc부터 온다. */
  isVisible: boolean | null;
}

export const EMPTY_FIELD_PLACEHOLDER = '-';

export function formatOptionalValue(
  value: string | number | null | undefined
): string {
  return value === null || value === undefined || value === ''
    ? EMPTY_FIELD_PLACEHOLDER
    : String(value);
}

/** 업종 이름 — 공통코드 `FRCS_TPBIZ_CD`에서 먼저, 없으면 `FRCS_CD`(4자리)에서 찾고, 그래도 없으면 코드를 그대로 보인다. */
export function formatCategoryLabel(codes: readonly CommonCode[], code: string): string {
  if (!code) {
    return EMPTY_FIELD_PLACEHOLDER;
  }
  return formatCommonCode(codes, code);
}

export function formatVisibilityLabel(isVisible: boolean | null): string {
  if (isVisible === null) {
    return EMPTY_FIELD_PLACEHOLDER;
  }
  return isVisible ? '노출' : '미노출';
}

/** 목록의 주소 칸 — 상세주소까지 붙이면 한 줄을 넘겨 표가 밀린다. */
export function formatAddressSummary(merchant: Merchant): string {
  return formatOptionalValue(merchant.address);
}

/**
 * 업종 코드 ↔ 백엔드 필드 — 조회·저장 모두 `FRCS_TPBIZ_CD`(BizPlay 업종코드)다.
 * `FRCS_DV_CD`는 가맹점 구분(온라인/일반)이라 업종이 아니다.
 *
 * 이슈: 목록 검색만 `searchFrcsTpbizCd`를 `FRCS_DV_CD`와 비교한다(보고함).
 */
export const MERCHANT_CATEGORY_READ_FIELD = 'frcsTpbizCd';
export const MERCHANT_CATEGORY_WRITE_FIELD = 'frcsTpbizCd';
