/**
 * CEO Dashboard API 응답 타입 정의
 *
 * Laravel API 응답과 Frontend 타입 간의 매핑을 위한 타입들
 */

// ============================================
// 1. DailyReport API 응답 타입
// ============================================

/** KRW/USD 통화별 합계 */
export interface CurrencyTotals {
  carryover: number;  // 전월 이월
  income: number;     // 수입 (입금)
  expense: number;    // 지출 (출금)
  balance: number;    // 잔액
}

/** 운영자금 안정성 상태 */
export type OperatingStability = 'stable' | 'caution' | 'warning' | 'unknown';

/** 어제 대비 변동률 */
export interface DailyChangeRate {
  cash_asset_change_rate?: number;       // 현금성 자산 변동률 (%)
  foreign_currency_change_rate?: number; // 외국환 변동률 (%)
  income_change_rate?: number;           // 입금 변동률 (%)
  expense_change_rate?: number;          // 출금 변동률 (%)
}

/** GET /api/proxy/daily-report/summary 응답 */
export interface DailyReportApiResponse {
  date: string;                    // "2026-01-20"
  day_of_week: string;             // "월요일"
  note_receivable_total: number;   // 수취채권 합계
  foreign_currency_total: number;  // 외화 합계 (USD)
  cash_asset_total: number;        // 현금성 자산 합계
  krw_totals: CurrencyTotals;      // 원화 합계
  usd_totals: CurrencyTotals;      // 달러 합계
  // 운영자금 안정성 지표
  monthly_operating_expense: number;  // 월 운영비 (직전 3개월 평균)
  operating_months: number | null;    // 운영 가능 개월 수
  operating_stability: OperatingStability;  // 안정성 상태
  // 기획서 D1.7 자금현황 카드용 필드
  receivable_balance: number;         // 미수금 잔액
  payable_balance: number;            // 미지급금 잔액
  monthly_expense_total: number;      // 당월 예상 지출 합계
  // 어제 대비 변동률 (optional - 백엔드에서 제공 시, 현재 주석 처리)
  daily_change?: DailyChangeRate;
}

// ============================================
// 2. Receivables API 응답 타입 (D1.7 cards + check_points 구조)
// ============================================

/** 미수금 카드 서브 아이템 */
export interface ReceivablesCardSubItem {
  label: string;
  value: number;
}

/** 미수금 Top 거래처 아이템 */
export interface ReceivablesTopItem {
  name: string;
  amount: number;
}

/** 미수금 금액 카드 아이템 */
export interface ReceivablesAmountCardApiResponse {
  id: string;
  label: string;
  amount: number;
  subLabel?: string;
  unit?: string;
  sub_items?: ReceivablesCardSubItem[];
  top_items?: ReceivablesTopItem[];
}

/** 미수금 체크포인트 하이라이트 아이템 */
export interface ReceivablesHighlightItemApiResponse {
  text: string;
  color: string;
}

/** 미수금 체크포인트 아이템 */
export interface ReceivablesCheckPointApiResponse {
  id: string;
  type: string;
  message: string;
  highlights?: ReceivablesHighlightItemApiResponse[];
}

/** GET /api/proxy/receivables/summary 응답 */
export interface ReceivablesApiResponse {
  cards: ReceivablesAmountCardApiResponse[];
  check_points: ReceivablesCheckPointApiResponse[];
}

// ============================================
// 3. BadDebt (채권추심) API 응답 타입
// ============================================

/** GET /api/proxy/bad-debts/summary 응답 */
export interface BadDebtApiResponse {
  total_amount: number;        // 총 악성채권
  collecting_amount: number;   // 추심중
  legal_action_amount: number; // 법적조치
  recovered_amount: number;    // 회수완료
  bad_debt_amount: number;     // 대손처리
  client_count?: number;       // 거래처 수
  sub_labels?: Record<string, string | null>; // 카드별 거래처 sub_label (dc1~dc4)
}

// ============================================
// 4. ExpectedExpense (당월 예상 지출) API 응답 타입
// ============================================

/** 상태/유형별 집계 아이템 */
export interface ExpenseSummaryItem {
  total: number;
  count: number;
}

/** GET /api/proxy/expected-expenses/summary 응답 */
export interface ExpectedExpenseApiResponse {
  total_amount: number;
  total_count: number;
  by_payment_status: Record<string, ExpenseSummaryItem>;
  by_transaction_type: Record<string, ExpenseSummaryItem>;
  by_month: Record<string, ExpenseSummaryItem>;
}

// ============================================
// 5. CardTransaction (카드/가지급금) API 응답 타입
// ============================================

/** GET /api/proxy/card-transactions/summary 응답 */
export interface CardTransactionApiResponse {
  previous_month_total: number;  // 전월 카드 사용액
  current_month_total: number;   // 당월 카드 사용액
  total_count: number;           // 총 건수
  total_amount: number;          // 총 금액
}

/** 카드 목록 아이템 (대시보드용) */
export interface CardListItemApiResponse {
  id: number;
  card_company: string;
  card_number_last4: string;
  card_name: string;
  status: 'active' | 'inactive';
  assigned_user?: {
    id: number;
    name: string;
  } | null;
  // 카드별 사용액 (선택적 - API 지원 시)
  current_month_amount?: number;
  previous_month_amount?: number;
}

/** GET /api/v1/cards 응답 (대시보드용) */
export interface CardListApiResponse {
  data: CardListItemApiResponse[];
  current_page: number;
  last_page: number;
  per_page: number;
  total: number;
}

// ============================================
// 공통 API 응답 Wrapper
// ============================================

/** 표준 API 응답 래퍼 */
export interface ApiResponse<T> {
  success: boolean;
  message: string;
  data: T;
}

// ============================================
// Dashboard Hook 상태 타입
// ============================================

/** 섹션별 로딩 상태 */
export interface DashboardLoadingState {
  dailyReport: boolean;
  receivable: boolean;
  debtCollection: boolean;
  monthlyExpense: boolean;
  cardManagement: boolean;
}

/** 섹션별 에러 상태 */
export interface DashboardErrorState {
  dailyReport: string | null;
  receivable: string | null;
  debtCollection: string | null;
  monthlyExpense: string | null;
  cardManagement: string | null;
}

// ============================================
// 6. StatusBoard (현황판) API 응답 타입
// ============================================

/** 현황판 카드 아이템 */
export interface StatusBoardItemApiResponse {
  id: string;           // 카드 ID (orders, bad_debts, etc.)
  label: string;        // 카드 라벨
  count: number | string; // 건수 또는 텍스트 (예: "부가세 신고 D-15")
  path: string;         // 이동 경로
  isHighlighted: boolean; // 강조 표시 여부
  sub_label?: string;   // 최근 항목 요약 (예: "대한철강 외 7건")
}

/** GET /api/proxy/status-board/summary 응답 */
export interface StatusBoardApiResponse {
  items: StatusBoardItemApiResponse[];
}

// ============================================
// 7. TodayIssue (오늘의 이슈 리스트) API 응답 타입
// ============================================

/** 오늘의 이슈 notification_type 코드 (API 고정값) */
export type TodayIssueNotificationType =
  | 'sales_order'      // 수주등록
  | 'bad_debt'         // 추심이슈
  | 'safety_stock'     // 안전재고
  | 'expected_expense' // 지출 승인대기
  | 'vat_report'       // 세금 신고
  | 'approval_request' // 결재 요청
  | 'new_vendor'       // 신규거래처
  | 'deposit'          // 입금
  | 'withdrawal';      // 출금

/** 오늘의 이슈 아이템 */
export interface TodayIssueItemApiResponse {
  id: string;                    // 항목 고유 ID
  badge: string;                 // 이슈 카테고리 뱃지 (한글)
  notification_type: TodayIssueNotificationType | null; // 이슈 타입 코드 (영문)
  content: string;               // 이슈 내용
  time: string;                  // 상대 시간 (예: "10분 전")
  date?: string;                 // 날짜 (ISO 형식)
  needsApproval?: boolean;       // 승인/반려 버튼 표시 여부
  path?: string;                 // 클릭 시 이동할 경로
}

/** GET /api/proxy/today-issues/summary 응답 */
export interface TodayIssueApiResponse {
  items: TodayIssueItemApiResponse[];
  total_count: number;           // 전체 이슈 건수
}

// ============================================
// 8. Calendar (캘린더) API 응답 타입
// ============================================

/** 캘린더 일정 타입 */
export type CalendarScheduleType = 'schedule' | 'order' | 'construction' | 'other' | 'bill'
    | 'expected_expense' | 'delivery' | 'shipment';

/** 캘린더 일정 아이템 */
export interface CalendarScheduleItemApiResponse {
  id: string;                              // 일정 ID (타입_ID 형식, 예: "wo_123")
  title: string;                           // 일정 제목
  startDate: string;                       // 시작일 (Y-m-d)
  endDate: string;                         // 종료일 (Y-m-d)
  startTime: string | null;                // 시작 시간 (HH:mm) 또는 null
  endTime: string | null;                  // 종료 시간 (HH:mm) 또는 null
  isAllDay: boolean;                       // 종일 여부
  type: CalendarScheduleType;              // 일정 타입
  department: string | null;               // 부서명
  personName: string | null;               // 담당자명
  color: string | null;                    // 일정 색상
}

/** GET /api/proxy/calendar/schedules 응답 */
export interface CalendarApiResponse {
  items: CalendarScheduleItemApiResponse[];
  total_count: number;                     // 총 일정 수
}

// ============================================
// 9. Vat (부가세) API 응답 타입
// ============================================

/** 부가세 금액 카드 아이템 */
export interface VatAmountCardApiResponse {
  id: string;             // 카드 ID (vat_sales_tax, vat_purchases_tax, etc.)
  label: string;          // 카드 라벨
  amount: number;         // 금액 또는 건수
  subLabel?: string;      // 부가 라벨 (예: "환급")
  unit?: string;          // 단위 (예: "건")
}

/** 부가세 체크포인트 하이라이트 아이템 */
export interface VatHighlightItemApiResponse {
  text: string;           // 하이라이트 텍스트
  color: string;          // 색상 (red, blue, green 등)
}

/** 부가세 체크포인트 아이템 */
export interface VatCheckPointApiResponse {
  id: string;             // 체크포인트 ID
  type: string;           // 타입 (success, warning, error)
  message: string;        // 메시지
  highlights?: VatHighlightItemApiResponse[];  // 하이라이트 아이템 목록
}

/** GET /api/proxy/vat/summary 응답 */
export interface VatApiResponse {
  cards: VatAmountCardApiResponse[];
  check_points: VatCheckPointApiResponse[];
}

// ============================================
// 9-1. Vat Detail (부가세 상세) API 응답 타입
// ============================================

/** 부가세 상세 요약 */
export interface VatDetailSummaryApiResponse {
  sales_supply_amount: number;      // 매출 공급가액
  sales_tax_amount: number;         // 매출 세액
  purchases_supply_amount: number;  // 매입 공급가액
  purchases_tax_amount: number;     // 매입 세액
  estimated_payment: number;        // 예상 납부세액
  is_refund: boolean;               // 환급 여부
}

/** 부가세 요약 테이블 행 */
export interface VatReferenceTableRowApiResponse {
  direction: string;              // sales | purchases
  direction_label: string;        // 매출 | 매입
  invoice_type: string;           // tax_invoice | invoice | modified
  invoice_type_label: string;     // 전자세금계산서 | 계산서 | 수정세금계산서
  supply_amount: number;          // 공급가액
  tax_amount: number;             // 세액
}

/** 미발행/미수취 세금계산서 */
export interface VatUnissuedInvoiceApiResponse {
  id: number;
  direction: string;
  direction_label: string;        // 매출 | 매입
  issue_date: string;             // 발생일자
  vendor_name: string;            // 거래처명
  tax_amount: number;             // 부가세
  status: string;                 // 미발행 | 미수취
}

/** 신고기간 옵션 */
export interface VatPeriodOptionApiResponse {
  value: string;                  // "2026-quarter-1"
  label: string;                  // "2026년 1기 예정신고"
}

/** GET /api/proxy/vat/detail 응답 */
export interface VatDetailApiResponse {
  period_label: string;
  period_options: VatPeriodOptionApiResponse[];
  summary: VatDetailSummaryApiResponse;
  reference_table: VatReferenceTableRowApiResponse[];
  unissued_invoices: VatUnissuedInvoiceApiResponse[];
}

// ============================================
// 10. Entertainment (접대비) API 응답 타입
// ============================================

/** 접대비 금액 카드 아이템 */
export interface EntertainmentAmountCardApiResponse {
  id: string;             // 카드 ID (et_sales, et_limit, etc.)
  label: string;          // 카드 라벨
  amount: number;         // 금액
  subLabel?: string;      // 부가 라벨
  unit?: string;          // 단위
}

/** 접대비 체크포인트 하이라이트 아이템 */
export interface EntertainmentHighlightItemApiResponse {
  text: string;           // 하이라이트 텍스트
  color: string;          // 색상 (red, green, orange 등)
}

/** 접대비 체크포인트 아이템 */
export interface EntertainmentCheckPointApiResponse {
  id: string;             // 체크포인트 ID
  type: string;           // 타입 (success, warning, error)
  message: string;        // 메시지
  highlights?: EntertainmentHighlightItemApiResponse[];  // 하이라이트 아이템 목록
}

/** GET /api/proxy/entertainment/summary 응답 */
export interface EntertainmentApiResponse {
  cards: EntertainmentAmountCardApiResponse[];
  check_points: EntertainmentCheckPointApiResponse[];
}

// ============================================
// 11. Welfare (복리후생비) API 응답 타입
// ============================================

/** 복리후생비 금액 카드 아이템 */
export interface WelfareAmountCardApiResponse {
  id: string;             // 카드 ID (wf_annual_limit, wf_period_limit, etc.)
  label: string;          // 카드 라벨
  amount: number;         // 금액
  subLabel?: string;      // 부가 라벨
  unit?: string;          // 단위
}

/** 복리후생비 체크포인트 하이라이트 아이템 */
export interface WelfareHighlightItemApiResponse {
  text: string;           // 하이라이트 텍스트
  color: string;          // 색상 (red, green, orange 등)
}

/** 복리후생비 체크포인트 아이템 */
export interface WelfareCheckPointApiResponse {
  id: string;             // 체크포인트 ID
  type: string;           // 타입 (success, warning, error)
  message: string;        // 메시지
  highlights?: WelfareHighlightItemApiResponse[];  // 하이라이트 아이템 목록
}

/** GET /api/proxy/welfare/summary 응답 */
export interface WelfareApiResponse {
  cards: WelfareAmountCardApiResponse[];
  check_points: WelfareCheckPointApiResponse[];
}

// ============================================
// 11-1. Entertainment Detail (접대비 상세) API 응답 타입
// ============================================

/** 접대비 상세 요약 */
export interface EntertainmentDetailSummaryApiResponse {
  annual_limit: number;       // 당해년도 접대비 총 한도
  annual_remaining: number;   // 당해년도 접대비 잔여한도
  annual_used: number;        // 당해년도 접대비 사용금액
  annual_exceeded: number;    // 당해년도 접대비 초과 금액
}

/** 접대비 리스크 검토 카드 */
export interface EntertainmentRiskReviewApiResponse {
  label: string;    // 주말/심야, 기피업종, 고액 결제, 증빙 미비
  amount: number;   // 금액
  count: number;    // 건수
}

/** 접대비 월별 사용 추이 */
export interface EntertainmentMonthlyUsageApiResponse {
  month: number;      // 1~12
  label: string;      // "1월"
  amount: number;     // 사용 금액
}

/** 접대비 사용자별 분포 */
export interface EntertainmentUserDistributionApiResponse {
  user_name: string;      // 사용자명
  amount: number;         // 금액
  percentage: number;     // 비율 (%)
  color: string;          // 차트 색상
}

/** 접대비 거래 내역 */
export interface EntertainmentTransactionApiResponse {
  id: number;
  card_name: string;        // 카드명
  user_name: string;        // 사용자명
  expense_date: string;     // 사용일자
  vendor_name: string;      // 가맹점명
  amount: number;           // 사용금액
  risk_type: string;        // 리스크 유형 (주말/심야, 기피업종, 고액 결제, 증빙 미비, 정상)
}

/** 접대비 손금한도 계산 정보 */
export interface EntertainmentCalculationApiResponse {
  company_type: string;         // 법인 유형 (large|medium|small)
  base_limit: number;           // 기본한도
  revenue: number;              // 수입금액
  revenue_additional: number;   // 수입금액별 추가한도
  annual_limit: number;         // 연간 총 한도
}

/** 접대비 분기별 현황 */
export interface EntertainmentQuarterlyStatusApiResponse {
  quarter: number;          // 분기 (1-4)
  limit: number;            // 한도금액
  carryover: number;        // 이월금액
  used: number;             // 사용금액
  remaining: number;        // 잔여한도
  exceeded: number;         // 초과금액
}

/** GET /api/proxy/entertainment/detail 응답 */
export interface EntertainmentDetailApiResponse {
  summary: EntertainmentDetailSummaryApiResponse;
  risk_review: EntertainmentRiskReviewApiResponse[];
  monthly_usage: EntertainmentMonthlyUsageApiResponse[];
  user_distribution: EntertainmentUserDistributionApiResponse[];
  transactions: EntertainmentTransactionApiResponse[];
  calculation: EntertainmentCalculationApiResponse;
  quarterly: EntertainmentQuarterlyStatusApiResponse[];
}

// ============================================
// 12. Welfare Detail (복리후생비 상세) API 응답 타입
// ============================================

/** 복리후생비 상세 요약 */
export interface WelfareDetailSummaryApiResponse {
  annual_account: number;     // 당해년도 복리후생비 계정 잔액
  annual_limit: number;       // 당해년도 복리후생비 한도
  annual_used: number;        // 당해년도 복리후생비 사용액
  annual_remaining: number;   // 당해년도 잔여한도
  quarterly_limit: number;    // 분기 복리후생비 총 한도
  quarterly_remaining: number; // 분기 복리후생비 잔여한도
  quarterly_used: number;     // 분기 복리후생비 사용금액
  quarterly_exceeded: number; // 분기 복리후생비 초과 금액
}

/** 복리후생비 월별 사용 추이 */
export interface WelfareMonthlyUsageApiResponse {
  month: string;    // "2026-01"
  label: string;    // "1월"
  amount: number;   // 사용 금액
}

/** 복리후생비 항목별 사용 비율 */
export interface WelfareCategoryDistributionApiResponse {
  category: string;     // meal, health_check, congratulation, other
  category_label: string; // 식비, 건강검진, 경조사비, 기타
  amount: number;       // 금액
  percentage: number;   // 비율
  color: string;        // 차트 색상
}

/** 복리후생비 거래 내역 */
export interface WelfareTransactionApiResponse {
  id: number;
  card_name: string;        // 카드명
  user_name: string;        // 사용자명
  transaction_date: string; // 사용일자
  merchant_name: string;    // 가맹점명
  amount: number;           // 사용금액
  usage_type: string;       // 사용항목 (meal, health_check, etc.)
  usage_type_label: string; // 사용항목 라벨 (식비, 건강검진, etc.)
}

/** 복리후생비 계산 정보 */
export interface WelfareCalculationApiResponse {
  type: 'fixed' | 'ratio';              // 계산 방식
  employee_count: number;               // 직원 수
  fixed_amount_per_month?: number;      // 1인당 월 정액 (fixed 방식)
  annual_amount_per_employee?: number;  // 1인당 연간 금액 (fixed 방식)
  total_salary?: number;                // 연봉 총액 (ratio 방식)
  ratio?: number;                       // 비율 (ratio 방식)
  annual_limit: number;                 // 계산된 연간 한도
}

/** 복리후생비 분기별 현황 */
export interface WelfareQuarterlyStatusApiResponse {
  quarter: number;          // 분기 (1-4)
  quarter_label: string;    // "1분기"
  limit: number;            // 한도금액
  carryover: number | null; // 이월금액 (1분기만 0, 나머지는 null 또는 계산값)
  used: number | null;      // 사용금액
  remaining: number | null; // 잔여한도
  exceeded: number | null;  // 초과금액
}

/** GET /api/proxy/welfare/detail 응답 */
export interface WelfareDetailApiResponse {
  summary: WelfareDetailSummaryApiResponse;
  monthly_usage: WelfareMonthlyUsageApiResponse[];
  category_distribution: WelfareCategoryDistributionApiResponse[];
  transactions: WelfareTransactionApiResponse[];
  calculation: WelfareCalculationApiResponse;
  quarterly: WelfareQuarterlyStatusApiResponse[];
}

// ============================================
// 13. Purchase Dashboard Detail (매입 상세) API 응답 타입
// ============================================

/** 매입 상세 요약 */
export interface PurchaseDashboardSummaryApiResponse {
  current_month_amount: number;    // 당월 매입액
  previous_month_amount: number;   // 전월 매입액
  change_rate: number;             // 전월 대비 변화율
}

/** 매입 월별 추이 */
export interface PurchaseMonthlyTrendApiResponse {
  month: string;    // "2026-01"
  label: string;    // "1월"
  amount: number;   // 금액
}

/** 매입 유형별 분포 */
export interface PurchaseByTypeApiResponse {
  type: string;           // 매입 유형 코드
  type_label: string;     // 유형 라벨 (원자재, 부자재, 외주, 기타)
  amount: number;         // 금액
  count: number;          // 건수
  color: string;          // 차트 색상
}

/** 매입 거래 내역 */
export interface PurchaseItemApiResponse {
  id: number;
  vendor_name: string;     // 거래처명
  purchase_date: string;   // 매입일자
  amount: number;          // 금액
  type: string;            // 유형 코드
  type_label: string;      // 유형 라벨
}

/** GET /api/v1/purchases/dashboard-detail 응답 */
export interface PurchaseDashboardDetailApiResponse {
  summary: PurchaseDashboardSummaryApiResponse;
  monthly_trend: PurchaseMonthlyTrendApiResponse[];
  by_type: PurchaseByTypeApiResponse[];
  items: PurchaseItemApiResponse[];
}

// ============================================
// 14. Card Transaction Dashboard Detail (카드 상세) API 응답 타입
// ============================================

/** 카드 상세 요약 */
export interface CardDashboardSummaryApiResponse {
  current_month_total: number;     // 당월 사용액
  previous_month_total: number;    // 전월 사용액
  total_count: number;             // 총 건수
  current_month_count: number;     // 당월 건수
}

/** 카드 월별 추이 */
export interface CardMonthlyTrendApiResponse {
  month: string;    // "2026-01"
  label: string;    // "1월"
  amount: number;   // 금액
}

/** 카드 사용자별 분포 */
export interface CardByUserApiResponse {
  user_name: string;      // 사용자명
  amount: number;         // 금액
  count: number;          // 건수
  color: string;          // 차트 색상
}

/** 카드 거래 내역 */
export interface CardTransactionItemApiResponse {
  id: number;
  card_name: string;        // 카드명
  user_name: string;        // 사용자명
  transaction_date: string; // 사용일자
  merchant_name: string;    // 가맹점명
  amount: number;           // 금액
  usage_type: string;       // 사용항목
}

/** GET /api/v1/card-transactions/dashboard 응답 */
export interface CardDashboardDetailApiResponse {
  summary: CardDashboardSummaryApiResponse;
  monthly_trend: CardMonthlyTrendApiResponse[];
  by_user: CardByUserApiResponse[];
  items: CardTransactionItemApiResponse[];
}

// ============================================
// 15. Bill Dashboard Detail (발행어음 상세) API 응답 타입
// ============================================

/** 발행어음 상세 요약 */
export interface BillDashboardSummaryApiResponse {
  current_month_amount: number;    // 당월 어음액
  previous_month_amount: number;   // 전월 어음액
  change_rate: number;             // 전월 대비 변화율
}

/** 발행어음 월별 추이 */
export interface BillMonthlyTrendApiResponse {
  month: string;    // "2026-01"
  label: string;    // "1월"
  amount: number;   // 금액
}

/** 발행어음 거래처별 분포 */
export interface BillByVendorApiResponse {
  vendor_name: string;    // 거래처명
  amount: number;         // 금액
  count: number;          // 건수
}

/** 발행어음 거래 내역 */
export interface BillItemApiResponse {
  id: number;
  vendor_name: string;     // 거래처명
  issue_date: string;      // 발행일
  due_date: string;        // 만기일
  amount: number;          // 금액
  status: string;          // 상태 코드
  status_label: string;    // 상태 라벨
}

/** GET /api/v1/bills/dashboard-detail 응답 */
export interface BillDashboardDetailApiResponse {
  summary: BillDashboardSummaryApiResponse;
  monthly_trend: BillMonthlyTrendApiResponse[];
  by_vendor: BillByVendorApiResponse[];
  items: BillItemApiResponse[];
}

// ============================================
// 16. Expected Expense Dashboard Detail (지출예상 상세) API 응답 타입
// ============================================

/** 지출예상 상세 요약 */
export interface ExpectedExpenseDashboardSummaryApiResponse {
  total_amount: number;           // 총 지출 예상액
  previous_month_amount: number;  // 전월 지출액
  change_rate: number;            // 전월 대비 변화율
  remaining_balance: number;      // 지출 후 예상 잔액
}

/** 지출예상 거래 내역 */
export interface ExpectedExpenseItemApiResponse {
  id: number;
  payment_date: string;    // 결제예정일
  item_name: string;       // 항목명
  amount: number;          // 금액
  vendor_name: string;     // 거래처명
  account_title: string;   // 계정과목
}

/** 지출예상 합계 정보 */
export interface ExpectedExpenseFooterSummaryApiResponse {
  total_amount: number;    // 합계 금액
  item_count: number;      // 건수
}

/** 지출예상 월별 추이 */
export interface ExpectedExpenseMonthlyTrendApiResponse {
  month: string;    // "2026-01"
  label: string;    // "1월"
  amount: number;   // 금액
}

/** 지출예상 거래처별 분포 */
export interface ExpectedExpenseVendorDistributionApiResponse {
  name: string;       // 거래처명
  value: number;      // 금액
  count: number;      // 건수
  percentage: number; // 비율(%)
  color: string;      // 차트 색상
}

/** GET /api/v1/expected-expenses/dashboard-detail 응답 */
export interface ExpectedExpenseDashboardDetailApiResponse {
  summary: ExpectedExpenseDashboardSummaryApiResponse;
  monthly_trend: ExpectedExpenseMonthlyTrendApiResponse[];
  vendor_distribution: ExpectedExpenseVendorDistributionApiResponse[];
  items: ExpectedExpenseItemApiResponse[];
  footer_summary: ExpectedExpenseFooterSummaryApiResponse;
}

// ============================================
// 17. Loan Dashboard Detail (가지급금 상세) API 응답 타입
// ============================================

/** 가지급금 대시보드 요약 */
export interface LoanDashboardSummaryApiResponse {
  total_outstanding: number;     // 미정산 잔액
  recognized_interest: number;   // 인정이자
  outstanding_count: number;     // 미정산 건수
}

/** 가지급금 월별 추이 */
export interface LoanMonthlyTrendApiResponse {
  month: string;    // "2026-01"
  label: string;    // "1월"
  amount: number;   // 금액
}

/** 가지급금 사용자별 분포 */
export interface LoanUserDistributionApiResponse {
  user_name: string;          // 사용자명
  total_outstanding: number;  // 미정산 잔액
  settled_amount: number;     // 정산 완료
  count: number;              // 건수
  color: string;              // 차트 색상
}

/** 가지급금 거래 내역 */
export interface LoanItemApiResponse {
  id: number;
  user_name: string;      // 사용자명
  loan_date: string;      // 가지급일
  amount: number;         // 금액
  content: string;        // 내용 (백엔드 필드명)
  category: string;       // 카테고리 라벨 (카드/경조사/상품권/접대비)
  status: string;         // 상태 코드
  status_label?: string;  // 상태 라벨 (optional - dashboard()에서 미반환 가능)
}

/** 가지급금 카테고리별 집계 (D1.7) */
export interface LoanCategoryBreakdown {
  outstanding_amount: number;
  total_count: number;
  unverified_count: number;
}

/** GET /api/v1/loans/dashboard 응답 */
export interface LoanDashboardApiResponse {
  summary: LoanDashboardSummaryApiResponse;
  category_breakdown?: Record<string, LoanCategoryBreakdown>;
  loans: LoanItemApiResponse[];
}

// ============================================
// 18. Tax Simulation (세금 시뮬레이션) API 응답 타입
// ============================================

/** 세금 시뮬레이션 - 가지급금 요약 */
export interface TaxSimulationLoanSummaryApiResponse {
  total_outstanding: number;     // 가지급금 잔액
  recognized_interest: number;   // 인정이자
  interest_rate: number;         // 이자율 (4.6%)
}

/** 세금 계산 결과 - 기본 */
export interface TaxCalculationBaseApiResponse {
  taxable_income: number;    // 과세소득
  tax_amount: number;        // 세금액
}

/** 세금 계산 결과 - 소득세용 (세율 포함) */
export interface TaxCalculationWithRateApiResponse {
  taxable_income: number;    // 과세소득
  tax_rate: string;          // 세율 (예: "35%")
  tax_amount: number;        // 세금액
}

/** 법인세 비교 */
export interface CorporateTaxComparisonApiResponse {
  without_loan: TaxCalculationBaseApiResponse;   // 가지급금 없는 경우
  with_loan: TaxCalculationBaseApiResponse;      // 가지급금 있는 경우
  difference: number;                            // 추가 법인세
  rate_info: string;                             // "법인세 19% 적용"
}

/** 소득세 내역 */
export interface IncomeTaxBreakdownApiResponse {
  income_tax: number;    // 소득세 (35%)
  local_tax: number;     // 지방소득세 (소득세의 10%)
  insurance: number;     // 4대보험 추정 (9%)
}

/** 소득세 비교 */
export interface IncomeTaxComparisonApiResponse {
  without_loan: TaxCalculationWithRateApiResponse;   // 가지급금 없는 경우
  with_loan: TaxCalculationWithRateApiResponse;      // 가지급금 있는 경우
  difference: number;                                // 추가 소득세
  breakdown: IncomeTaxBreakdownApiResponse;          // 세금 내역
}

/** GET /api/v1/loans/tax-simulation 응답 */
export interface TaxSimulationApiResponse {
  year: number;                                       // 시뮬레이션 연도
  loan_summary: TaxSimulationLoanSummaryApiResponse;  // 가지급금 요약
  corporate_tax: CorporateTaxComparisonApiResponse;   // 법인세 비교
  income_tax: IncomeTaxComparisonApiResponse;         // 소득세 비교
}

// ============================================
// 19. SalesStatus (매출 현황) API 응답 타입
// ============================================

/** 매출 월별 추이 */
export interface SalesMonthlyTrendApiResponse {
  month: string;    // "2026-08"
  label: string;    // "8월"
  amount: number;   // 금액
}

/** 거래처별 매출 */
export interface SalesClientApiResponse {
  name: string;     // 거래처명
  amount: number;   // 금액
}

/** 일별 매출 아이템 */
export interface SalesDailyItemApiResponse {
  date: string;     // "2026-02-01"
  client: string;   // 거래처명
  item: string;     // 품목명
  amount: number;   // 금액
  status: 'deposited' | 'unpaid' | 'partial'; // 입금상태
}

/** GET /api/v1/dashboard/sales/summary 응답 */
export interface SalesStatusApiResponse {
  cumulative_sales: number;          // 누적 매출
  achievement_rate: number;          // 달성률 (%)
  yoy_change: number;                // 전년 동월 대비 변화율 (%)
  monthly_sales: number;             // 당월 매출
  monthly_trend: SalesMonthlyTrendApiResponse[];
  client_sales: SalesClientApiResponse[];
  daily_items: SalesDailyItemApiResponse[];
  daily_total: number;               // 일별 합계
}

// ============================================
// 20. PurchaseStatus (매입 현황) API 응답 타입
// ============================================

/** 매입 월별 추이 */
export interface PurchaseMonthlyTrendDashboardApiResponse {
  month: string;    // "2026-08"
  label: string;    // "8월"
  amount: number;   // 금액
}

/** 자재 구성 비율 */
export interface PurchaseMaterialRatioApiResponse {
  name: string;       // "원자재", "부자재", "소모품"
  value: number;      // 금액
  percentage: number; // 비율 (%)
  color: string;      // 차트 색상
}

/** 일별 매입 아이템 */
export interface PurchaseDailyItemApiResponse {
  date: string;       // "2026-02-01"
  supplier: string;   // 거래처명
  item: string;       // 품목명
  amount: number;     // 금액
  status: 'paid' | 'unpaid' | 'partial'; // 결제상태
}

/** GET /api/v1/dashboard/purchases/summary 응답 */
export interface PurchaseStatusApiResponse {
  cumulative_purchase: number;       // 누적 매입
  unpaid_amount: number;             // 미결제 금액
  yoy_change: number;                // 전년 동월 대비 변화율 (%)
  monthly_trend: PurchaseMonthlyTrendDashboardApiResponse[];
  material_ratio: PurchaseMaterialRatioApiResponse[];
  daily_items: PurchaseDailyItemApiResponse[];
  daily_total: number;               // 일별 합계
}

// ============================================
// 21. DailyProduction (생산 현황) API 응답 타입
// ============================================

/** 공정별 작업 아이템 */
export interface ProductionWorkItemApiResponse {
  id: string;
  order_no: string;     // 수주번호
  client: string;       // 거래처명
  product: string;      // 제품명
  quantity: number;      // 수량
  status: 'in_progress' | 'pending' | 'completed';
}

/** 공정별 작업자 */
export interface ProductionWorkerApiResponse {
  name: string;
  assigned: number;     // 배정 건수
  completed: number;    // 완료 건수
  rate: number;         // 완료율 (%)
}

/** 공정별 데이터 */
export interface ProductionProcessApiResponse {
  process_name: string;     // "스크린", "슬랫", "절곡"
  total_work: number;
  todo: number;
  in_progress: number;
  completed: number;
  urgent: number;           // 긴급 건수
  sub_line: number;
  regular: number;
  worker_count: number;
  work_items: ProductionWorkItemApiResponse[];
  workers: ProductionWorkerApiResponse[];
}

/** 출고 현황 */
export interface ShipmentApiResponse {
  expected_amount: number;
  expected_count: number;
  actual_amount: number;
  actual_count: number;
}

/** GET /api/v1/dashboard/production/summary 응답 */
export interface DailyProductionApiResponse {
  date: string;               // "2026-02-23"
  day_of_week: string;        // "월요일"
  processes: ProductionProcessApiResponse[];
  shipment: ShipmentApiResponse;
}

// ============================================
// 22. Unshipped (미출고 내역) API 응답 타입
// ============================================

/** 미출고 아이템 */
export interface UnshippedItemApiResponse {
  id: string;
  port_no: string;          // 로트번호
  site_name: string;        // 현장명
  order_client: string;     // 수주처
  due_date: string;         // 납기일
  days_left: number;        // 잔여일수
}

/** GET /api/v1/dashboard/unshipped/summary 응답 */
export interface UnshippedApiResponse {
  items: UnshippedItemApiResponse[];
  total_count: number;
}

// ============================================
// 23. Construction (시공 현황) API 응답 타입
// ============================================

/** 시공 아이템 */
export interface ConstructionItemApiResponse {
  id: string;
  site_name: string;        // 현장명
  client: string;           // 거래처명
  start_date: string;       // 시작일
  end_date: string;         // 종료일
  progress: number;         // 진행률 (%)
  status: 'in_progress' | 'scheduled' | 'completed';
}

/** GET /api/v1/dashboard/construction/summary 응답 */
export interface ConstructionApiResponse {
  this_month: number;       // 이번 달 시공 건수
  completed: number;        // 완료 건수
  items: ConstructionItemApiResponse[];
}

// ============================================
// 24. DailyAttendance (근태 현황) API 응답 타입
// ============================================

/** 직원 근태 아이템 */
export interface AttendanceEmployeeApiResponse {
  id: string;
  department: string;       // 부서명
  position: string;         // 직급
  name: string;             // 이름
  status: 'present' | 'on_leave' | 'late' | 'absent';
}

/** GET /api/v1/dashboard/attendance/summary 응답 */
export interface DailyAttendanceApiResponse {
  present: number;          // 출근
  on_leave: number;         // 휴가
  late: number;             // 지각
  absent: number;           // 결근
  employees: AttendanceEmployeeApiResponse[];
}