/**
 * 지출 예상 내역서 타입 정의
 */

// 거래 유형
export type TransactionType =
  | 'purchase' // 매입
  | 'advance' // 선급금
  | 'suspense' // 가지급금
  | 'rent' // 임대료
  | 'salary' // 급여
  | 'insurance' // 보험료
  | 'tax' // 세금
  | 'utilities' // 공과금
  | 'other'; // 기타

// 지급 상태
export type PaymentStatus =
  | 'pending' // 미지급
  | 'partial' // 부분지급
  | 'paid' // 지급완료
  | 'overdue'; // 연체

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

// 전자결재 상태
export type ApprovalStatus =
  | 'none' // 미신청
  | 'pending' // 결재대기
  | 'approved' // 결재완료
  | 'rejected'; // 반려

// 지출 예상 내역 레코드
export interface ExpectedExpenseRecord {
  id: string;
  expectedPaymentDate: string; // 예상 지급일
  settlementDate: string; // 결제일
  transactionType: TransactionType; // 거래유형
  amount: number; // 지출금액
  vendorId: string; // 거래처 ID
  vendorName: string; // 거래처명
  bankAccount: string; // 계좌
  accountSubject: string; // 계정과목 (항목)
  paymentStatus: PaymentStatus; // 지급상태
  approvalStatus: ApprovalStatus; // 전자결재 상태
  note: string; // 적요/메모
  createdAt: string;
  updatedAt: string;
}

// 거래유형 레이블
export const TRANSACTION_TYPE_LABELS: Record<TransactionType, string> = {
  purchase: '매입',
  advance: '선급금',
  suspense: '가지급금',
  rent: '임대료',
  salary: '급여',
  insurance: '보험료',
  tax: '세금',
  utilities: '공과금',
  other: '기타',
};

// 거래유형 필터 옵션
export const TRANSACTION_TYPE_FILTER_OPTIONS = [
  { value: 'all', label: '전체' },
  { value: 'purchase', label: '매입' },
  { value: 'advance', label: '선급금' },
  { value: 'suspense', label: '가지급금' },
  { value: 'rent', label: '임대료' },
  { value: 'salary', label: '급여' },
  { value: 'insurance', label: '보험료' },
  { value: 'tax', label: '세금' },
  { value: 'utilities', label: '공과금' },
  { value: 'other', label: '기타' },
];

// 지급상태 설정 (status-config 기반)
import { PAYMENT_STATUS_CONFIG } from '@/lib/utils/status-config';

export const PAYMENT_STATUS_LABELS = PAYMENT_STATUS_CONFIG.STATUS_LABELS;
export const PAYMENT_STATUS_FILTER_OPTIONS = PAYMENT_STATUS_CONFIG.STATUS_OPTIONS;

// 정렬 옵션
export const SORT_OPTIONS: { value: SortOption; label: string }[] = [
  { value: 'latest', label: '최신순' },
  { value: 'oldest', label: '등록순' },
];

// 전자결재 상태 레이블
export const APPROVAL_STATUS_LABELS: Record<ApprovalStatus, string> = {
  none: '미신청',
  pending: '결재대기',
  approved: '결재완료',
  rejected: '반려',
};