/**
 * 미수금 현황 타입 정의
 * - 동적 월 지원 (최근 1년, 특정 연도)
 * - 이월잔액 및 누적 미수금 계산
 * - 거래처 메모 (월별 아닌 거래처 단위)
 */

/**
 * 월별 금액 데이터 (동적 월 지원)
 */
export interface MonthlyAmount {
  values: number[]; // 월별 금액 배열 (12개 또는 동적 개수)
  total: number; // 합계
}

/**
 * 구분 타입 (매출, 입금, 어음, 미수금)
 */
export type CategoryType = 'sales' | 'deposit' | 'bill' | 'receivable';

/**
 * 구분 레이블
 */
export const CATEGORY_LABELS: Record<CategoryType, string> = {
  sales: '매출',
  deposit: '입금',
  bill: '어음',
  receivable: '미수금',
};

/**
 * 구분별 데이터
 */
export interface CategoryData {
  category: CategoryType;
  amounts: MonthlyAmount;
}

/**
 * 거래처별 미수금 현황 데이터
 */
export interface VendorReceivables {
  id: string;
  vendorName: string;
  isOverdue: boolean; // 연체 토글 상태
  memo: string; // 거래처 메모 (월별 아닌 거래처 단위)
  carryForwardBalance: number; // 이월잔액
  monthLabels: string[]; // 동적 월 레이블 (ex: ['25.02', '25.03', ...])
  categories: CategoryData[];
}

/**
 * API 응답 데이터 구조
 */
export interface ReceivablesListResponse {
  monthLabels: string[]; // 공통 월 레이블 (헤더용)
  items: VendorReceivables[];
}

/**
 * 정렬 옵션
 */
export type SortOption = 'overdueFirst' | 'vendorName' | 'totalDesc' | 'totalAsc';

export const SORT_OPTIONS: Array<{ value: SortOption; label: string }> = [
  { value: 'overdueFirst', label: '연체 업체 우선' },
  { value: 'vendorName', label: '거래처명 순' },
  { value: 'totalDesc', label: '금액 높은순' },
  { value: 'totalAsc', label: '금액 낮은순' },
];

/**
 * 메모 업데이트 요청 타입
 */
export interface MemoUpdateRequest {
  id: string;
  memo: string;
}