// ===== 계좌 입출금 내역 타입 정의 =====

// 거래 구분
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 type AccountCategory = 'bank_account' | 'loan_account' | 'securities_account' | 'insurance_account';

// 입출금 거래 레코드
export interface BankTransaction {
  id: string;
  bankName: string;           // 은행명
  accountName: string;        // 계좌명
  accountNumber?: string;     // 계좌번호
  accountCategory?: AccountCategory; // 계좌 카테고리 (은행계좌/대출계좌/증권계좌/보험계좌)
  transactionDate: string;    // 거래일
  transactionTime?: string;   // 거래시간 (HHMMSS)
  type: TransactionKind;      // 입금/출금
  note?: string;              // 적요/내용
  vendorId?: string;          // 거래처 ID
  vendorName?: string;        // 거래처명
  depositorName?: string;     // 상대계좌 예금주명
  depositAmount: number;      // 입금
  withdrawalAmount: number;   // 출금
  balance: number;            // 잔액
  transactionType?: string;   // 입출금 유형
  sourceId: string;           // 원본 입금/출금 ID
  bankAccountId?: number;     // 계좌 ID
  memo?: string;              // 메모
  branch?: string;            // 취급점
  isManual: boolean;          // 수기(true) / 연동(false)
  modifiedFields?: string[];  // 수정된 필드 목록
  createdAt: string;
  updatedAt: string;
}

// 수기 입력/수정 폼 데이터
export interface TransactionFormData {
  bankAccountId: number | null; // 계좌 ID
  transactionDate: string;      // 거래일
  transactionTime: string;      // 거래시간
  type: TransactionKind;        // 거래유형 (입금/출금)
  amount: number;               // 금액
  note: string;                 // 적요
  depositorName: string;        // 상대계좌 예금주명
  memo: string;                 // 메모
  branch: string;               // 취급점
}

// 계좌 카테고리 필터 (④ 구분)
export type AccountCategoryFilter = 'all' | 'bank_account' | 'loan_account' | 'securities_account' | 'insurance_account';

// 정렬 옵션
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 ACCOUNT_CATEGORY_LABELS: Record<AccountCategory, string> = {
  bank_account: '은행계좌',
  loan_account: '대출계좌',
  securities_account: '증권계좌',
  insurance_account: '보험계좌',
};

// ④ 구분 셀렉트 옵션
export const ACCOUNT_CATEGORY_OPTIONS: { value: AccountCategoryFilter; label: string }[] = [
  { value: 'all', label: '전체' },
  { value: 'bank_account', label: '은행계좌' },
  { value: 'loan_account', label: '대출계좌' },
  { value: 'securities_account', label: '증권계좌' },
  { value: 'insurance_account', 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: '기타' },
];
