// ===== 입출금 계좌조회 타입 정의 =====

// 거래 구분
export type TransactionKind = 'deposit' | 'withdrawal';

// 입출금 유형 (입금)
export type DepositTransactionType =
  | 'unset'           // 미설정
  | 'salesRevenue'    // 매출수금
  | 'advance'         // 선수금
  | 'suspense'        // 가수금
  | 'rentalIncome'    // 임대수입
  | 'interestIncome'  // 이자수입
  | 'depositRefund'   // 보증금반환
  | 'borrowings'      // 차입금
  | 'capital'         // 자본금
  | 'vatRefund'       // 부가세환급
  | 'other';          // 기타

// 입출금 유형 (출금)
export type WithdrawalTransactionType =
  | 'unset'           // 미설정
  | 'purchasePayment' // 매입지급
  | 'advance'         // 선급금
  | 'suspense'        // 가지급금
  | 'salary'          // 급여
  | 'rent'            // 임차료
  | 'utilities'       // 공과금
  | 'loanRepayment'   // 차입금상환
  | 'vatPayment'      // 부가세납부
  | 'other';          // 기타

// 입출금 거래 레코드
export interface BankTransaction {
  id: string;
  bankName: string;           // 은행명
  accountName: string;        // 계좌명
  transactionDate: string;    // 거래일시
  type: TransactionKind;      // 구분 (입금/출금)
  note?: string;              // 적요
  vendorId?: string;          // 거래처 ID
  vendorName?: string;        // 거래처명
  depositorName?: string;     // 입금자/수취인
  depositAmount: number;      // 입금
  withdrawalAmount: number;   // 출금
  balance: number;            // 잔액
  transactionType?: string;   // 입출금 유형
  sourceId: string;           // 원본 입금/출금 ID (상세 이동용)
  createdAt: string;
  updatedAt: string;
}

// 필터 타입
export type TransactionFilter = 'all' | 'deposit' | 'withdrawal';

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

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

export const TRANSACTION_KIND_LABELS: Record<TransactionKind, string> = {
  deposit: '입금',
  withdrawal: '출금',
};

export const DEPOSIT_TYPE_LABELS: Record<DepositTransactionType, string> = {
  unset: '미설정',
  salesRevenue: '매출수금',
  advance: '선수금',
  suspense: '가수금',
  rentalIncome: '임대수입',
  interestIncome: '이자수입',
  depositRefund: '보증금반환',
  borrowings: '차입금',
  capital: '자본금',
  vatRefund: '부가세환급',
  other: '기타',
};

export const WITHDRAWAL_TYPE_LABELS: Record<WithdrawalTransactionType, string> = {
  unset: '미설정',
  purchasePayment: '매입지급',
  advance: '선급금',
  suspense: '가지급금',
  salary: '급여',
  rent: '임차료',
  utilities: '공과금',
  loanRepayment: '차입금상환',
  vatPayment: '부가세납부',
  other: '기타',
};

export const FILTER_OPTIONS: { value: TransactionFilter; label: string }[] = [
  { value: 'all', label: '전체(선택)' },
  { value: 'deposit', label: '입금/수입' },
  { value: 'withdrawal', label: '출금' },
];

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

// 입출금유형 필터 옵션 (통합)
export const TRANSACTION_TYPE_FILTER_OPTIONS: { value: string; label: string }[] = [
  { value: 'all', label: '전체' },
  { value: 'unset', label: '미설정' },
  // 입금 유형
  { value: 'salesRevenue', label: '매출수금' },
  { value: 'advance_deposit', label: '선수금' },
  { value: 'suspense_deposit', label: '가수금' },
  { value: 'rentalIncome', label: '임대수입' },
  { value: 'interestIncome', label: '이자수입' },
  { value: 'depositRefund', label: '보증금반환' },
  { value: 'borrowings', label: '차입금' },
  { value: 'capital', label: '자본금' },
  { value: 'vatRefund', label: '부가세환급' },
  // 출금 유형
  { value: 'purchasePayment', label: '매입지급' },
  { value: 'advance_withdrawal', label: '선급금' },
  { value: 'suspense_withdrawal', label: '가지급금' },
  { value: 'salary', label: '급여' },
  { value: 'rent', label: '임차료' },
  { value: 'utilities', label: '공과금' },
  { value: 'loanRepayment', label: '차입금상환' },
  { value: 'vatPayment', label: '부가세납부' },
  { value: 'other', label: '기타' },
];