// ===== 카드 사용내역 타입 정의 =====

// 카드 거래 레코드
export interface CardTransaction {
  id: string;
  cardCompany: string;       // 카드사 (신한, KB 등)
  card: string;              // 카드번호 표시 (****1234 등)
  cardName: string;          // 카드명 (법인카드1 등)
  user: string;              // 사용자
  usedAt: string;            // 사용일시
  merchantName: string;      // 가맹점명
  businessNumber: string;    // 사업자번호
  vendorName: string;        // 증빙/판매자상호
  supplyAmount: number;      // 공급가액
  taxAmount: number;         // 세액
  totalAmount: number;       // 합계금액 (공급가액 + 세액)
  deductionType: string;     // 공제여부 (deductible | non_deductible)
  accountSubject: string;    // 계정과목
  description: string;       // 내역
  approvalNumber?: string;   // 승인번호
  approvalType?: string;     // 승인유형 (approved | cancelled)
  isHidden: boolean;         // 숨김 여부
  hiddenAt?: string;         // 숨김일시
  isManual: boolean;         // 수기 입력 여부
  memo?: string;             // 메모
  // 하위 호환용 (기존 필드)
  amount: number;            // 사용금액 (totalAmount과 동일)
  usageType: string;         // 사용유형 (기존 호환)
  createdAt: string;
  updatedAt: string;
}

// 분개 항목
export interface JournalEntryItem {
  id?: string;
  supplyAmount: number;      // 공급가액
  taxAmount: number;         // 세액
  totalAmount: number;       // 합계금액
  accountSubject: string;    // 계정과목
  deductionType: string;     // 공제여부
  vendorName: string;        // 증빙/판매자상호
  description: string;       // 내역
  memo: string;              // 메모
}

// 분개 데이터
export interface JournalEntry {
  transactionId: string;
  items: JournalEntryItem[];
  totalAmount: number;       // 분개 합계
}

// 인라인 편집 데이터
export interface InlineEditData {
  deductionType?: string;
  accountSubject?: string;
  vendorName?: string;
  description?: string;
  supplyAmount?: number;
  taxAmount?: number;
}

// 수기 입력 폼 데이터
export interface ManualInputFormData {
  cardId: string;
  usedDate: string;          // yyyy-MM-dd
  usedTime: string;          // HH:mm:ss
  approvalNumber: string;
  approvalType: 'approved' | 'cancelled';
  supplyAmount: number;
  taxAmount: number;
  merchantName: string;
  businessNumber: string;
  deductionType: string;
  accountSubject: string;
  vendorName: string;        // 증빙/판매자상호
  description: string;       // 내역
  memo: string;
}

// 정렬 옵션
export type SortOption = 'latest' | 'oldest' | 'amountHigh' | 'amountLow';

// ===== 라벨 상수 =====

export const SORT_OPTIONS: { value: SortOption; label: string }[] = [
  { value: 'latest', label: '최신순' },
  { value: 'oldest', label: '등록순' },
  { value: 'amountHigh', label: '금액높은순' },
  { value: 'amountLow', label: '금액낮은순' },
];

// ===== 공제여부 옵션 =====
export const DEDUCTION_OPTIONS = [
  { value: 'deductible', label: '공제' },
  { value: 'non_deductible', label: '불공제' },
];

// ===== 사용유형 옵션 =====
export const USAGE_TYPE_OPTIONS = [
  { value: 'unset', label: '미설정' },
  { value: 'welfare', label: '복리후생비' },
  { value: 'entertainment', label: '접대비' },
  { value: 'transportation', label: '여비교통비' },
  { value: 'vehicle', label: '차량유지비' },
  { value: 'supplies', label: '소모품비' },
  { value: 'delivery', label: '운반비' },
  { value: 'communication', label: '통신비' },
  { value: 'printing', label: '도서인쇄비' },
  { value: 'training', label: '교육훈련비' },
  { value: 'insurance', label: '보험료' },
  { value: 'advertising', label: '광고선전비' },
  { value: 'membership', label: '회비' },
  { value: 'commission', label: '지급수수료' },
  { value: 'taxesAndDues', label: '세금과공과' },
  { value: 'repair', label: '수선비' },
  { value: 'rent', label: '임차료' },
  { value: 'miscellaneous', label: '잡비' },
];

// ===== 월 프리셋 옵션 =====
export const MONTH_PRESETS = [
  { label: '이번달', value: 0 },
  { label: '저번달', value: -1 },
  { label: 'D-2달', value: -2 },
  { label: 'D-3달', value: -3 },
  { label: 'D-4달', value: -4 },
  { label: 'D-5달', value: -5 },
];
