/**
 * 중앙 포맷팅 규칙 정의.
 * 모든 날짜/숫자/통화 포맷은 이 파일의 규칙을 따른다.
 * 변경이 필요하면 이 파일만 수정하면 전체 적용된다.
 */

export interface DateFormatRules {
  /** 날짜만 표시 (예: "2025-01-01") */
  display: string;
  /** 날짜+시간 표시 (예: "2025-01-01 14:30:00") */
  datetime: string;
  /** 입력 필드용 (예: "YYYY-MM-DD") */
  input: string;
  /** 시간만 표시 (예: "14:30") */
  time: string;
}

export interface NumberFormatRules {
  /** 숫자 로케일 (천단위 구분자 등) */
  locale: string;
  /** 기본 소수점 자릿수 */
  decimals: number;
}

export interface CurrencyFormatRules {
  /** 통화 코드 (예: "KRW", "USD") */
  code: string;
  /** 통화 로케일 */
  locale: string;
}

export interface FormatRules {
  date: DateFormatRules;
  number: NumberFormatRules;
  currency: CurrencyFormatRules;
}

/** 기본 포맷 규칙 (한국어 기준) */
export const DEFAULT_FORMAT_RULES: FormatRules = {
  date: {
    display: "YYYY-MM-DD",
    datetime: "YYYY-MM-DD HH:mm:ss",
    input: "YYYY-MM-DD",
    time: "HH:mm",
  },
  number: {
    locale: "ko-KR",
    decimals: 0,
  },
  currency: {
    code: "KRW",
    locale: "ko-KR",
  },
};

/** 현재 적용 중인 포맷 규칙 (런타임에 변경 가능) */
let currentRules: FormatRules = { ...DEFAULT_FORMAT_RULES };

export function getFormatRules(): FormatRules {
  return currentRules;
}

export function setFormatRules(rules: Partial<FormatRules>): void {
  currentRules = {
    ...currentRules,
    ...rules,
    date: { ...currentRules.date, ...rules.date },
    number: { ...currentRules.number, ...rules.number },
    currency: { ...currentRules.currency, ...rules.currency },
  };
}
