import type { DetailModalConfig } from '../types';
import type {
  CardDashboardDetailApiResponse,
  LoanDashboardApiResponse,
  TaxSimulationApiResponse,
} from '@/lib/api/dashboard/types';
import {
  transformCm1ModalConfig,
  transformCm2ModalConfig,
  transformCm3ModalConfig,
  transformCm4ModalConfig,
} from './cardManagementConfigTransformers';

/**
 * 카드/가지급금 관리 모달 설정
 * cm1: 카드 사용 상세
 * cm2: 가지급금 상세
 * cm3: 법인세 예상 가중 상세
 * cm4: 대표자 종합소득세 예상 가중 상세
 */

// ============================================
// API 데이터 기반 모달 설정 생성
// ============================================

export interface CardManagementModalData {
  cm1Data?: CardDashboardDetailApiResponse | null;
  cm2Data?: LoanDashboardApiResponse | null;
  cm3Data?: TaxSimulationApiResponse | null;
  cm4Data?: TaxSimulationApiResponse | null;
}

/**
 * API 데이터를 사용하여 모달 설정을 동적으로 생성
 * 데이터가 없는 경우 fallback 설정 사용
 */
export function getCardManagementModalConfigWithData(
  cardId: string,
  data: CardManagementModalData
): DetailModalConfig | null {
  switch (cardId) {
    case 'cm1':
      if (data.cm1Data) {
        return transformCm1ModalConfig(data.cm1Data);
      }
      return getCardManagementModalConfig(cardId);

    case 'cm2':
      if (data.cm2Data) {
        return transformCm2ModalConfig(data.cm2Data);
      }
      return getCardManagementModalConfig(cardId);

    case 'cm3':
      if (data.cm3Data) {
        return transformCm3ModalConfig(data.cm3Data);
      }
      return getCardManagementModalConfig(cardId);

    case 'cm4':
      if (data.cm4Data) {
        return transformCm4ModalConfig(data.cm4Data);
      }
      return getCardManagementModalConfig(cardId);

    default:
      return null;
  }
}

// ============================================
// Fallback 모달 설정 (API 데이터 없을 때 사용)
// ============================================

/**
 * Fallback: 정적 목업 데이터 기반 모달 설정
 * API 데이터가 없을 때 사용
 */
export function getCardManagementModalConfig(cardId: string): DetailModalConfig | null {
  const configs: Record<string, DetailModalConfig> = {
    cm1: {
      title: '카드 사용 상세',
      summaryCards: [
        { label: '당월 카드 사용', value: 30123000, unit: '원' },
        { label: '전월 대비', value: '+10.5%', isComparison: true, isPositive: true },
        { label: '미정리 건수', value: '5건' },
      ],
      barChart: {
        title: '월별 카드 사용 추이',
        data: [
          { name: '7월', value: 28000000 },
          { name: '8월', value: 32000000 },
          { name: '9월', value: 27000000 },
          { name: '10월', value: 35000000 },
          { name: '11월', value: 29000000 },
          { name: '12월', value: 30123000 },
        ],
        dataKey: 'value',
        xAxisKey: 'name',
        color: '#60A5FA',
      },
      pieChart: {
        title: '사용자별 카드 사용 비율',
        data: [
          { name: '대표이사', value: 15000000, percentage: 50, color: '#60A5FA' },
          { name: '경영지원팀', value: 9000000, percentage: 30, color: '#34D399' },
          { name: '영업팀', value: 6123000, percentage: 20, color: '#FBBF24' },
        ],
      },
      table: {
        title: '카드 사용 내역',
        columns: [
          { key: 'no', label: 'No.', align: 'center' },
          { key: 'cardName', label: '카드명', align: 'left' },
          { key: 'user', label: '사용자', align: 'center' },
          { key: 'date', label: '사용일시', align: 'center', format: 'date' },
          { key: 'store', label: '가맹점명', align: 'left' },
          { key: 'amount', label: '사용금액', align: 'right', format: 'currency' },
          { key: 'usageType', label: '사용유형', align: 'center', highlightValue: '미설정' },
        ],
        data: [
          { cardName: '법인카드1', user: '대표이사', date: '2026-01-05 18:30', store: '스타벅스 강남점', amount: 45000, usageType: '복리후생비' },
          { cardName: '법인카드1', user: '대표이사', date: '2026-01-04 12:15', store: '한식당', amount: 350000, usageType: '접대비' },
          { cardName: '법인카드2', user: '경영지원팀', date: '2026-01-03 14:20', store: '오피스디포', amount: 125000, usageType: '소모품비' },
          { cardName: '법인카드1', user: '대표이사', date: '2026-01-02 19:45', store: '골프장', amount: 850000, usageType: '미설정' },
          { cardName: '법인카드3', user: '영업팀', date: '2026-01-02 11:30', store: 'GS칼텍스', amount: 80000, usageType: '교통비' },
          { cardName: '법인카드2', user: '경영지원팀', date: '2026-01-01 16:00', store: '이마트', amount: 230000, usageType: '미설정' },
          { cardName: '법인카드1', user: '대표이사', date: '2025-12-30 20:30', store: '백화점', amount: 1500000, usageType: '미설정' },
          { cardName: '법인카드3', user: '영업팀', date: '2025-12-29 09:15', store: '커피빈', amount: 32000, usageType: '복리후생비' },
          { cardName: '법인카드2', user: '경영지원팀', date: '2025-12-28 13:45', store: '문구점', amount: 55000, usageType: '소모품비' },
          { cardName: '법인카드1', user: '대표이사', date: '2025-12-27 21:00', store: '호텔', amount: 450000, usageType: '미설정' },
        ],
        filters: [
          {
            key: 'user',
            options: [
              { value: 'all', label: '전체' },
              { value: '대표이사', label: '대표이사' },
              { value: '경영지원팀', label: '경영지원팀' },
              { value: '영업팀', label: '영업팀' },
            ],
            defaultValue: 'all',
          },
          {
            key: 'usageType',
            options: [
              { value: 'all', label: '전체' },
              { value: '미설정', label: '미설정' },
              { value: '복리후생비', label: '복리후생비' },
              { value: '접대비', label: '접대비' },
              { value: '소모품비', label: '소모품비' },
              { value: '교통비', label: '교통비' },
            ],
            defaultValue: 'all',
          },
        ],
        showTotal: true,
        totalLabel: '합계',
        totalValue: 30123000,
        totalColumnKey: 'amount',
      },
    },
    // P52: 가지급금 상세
    cm2: {
      title: '가지급금 상세',
      dateFilter: {
        enabled: true,
        defaultPreset: '당월',
        showSearch: true,
      },
      summaryCards: [
        { label: '가지급금 합계', value: '4.5억원' },
        { label: '가지급금 총액', value: 6000000, unit: '원' },
        { label: '건수', value: '10건' },
      ],
      reviewCards: {
        title: '가지급금 검토 필요',
        cards: [
          { label: '카드', amount: 3123000, subLabel: '미정리 5건' },
          { label: '경조사', amount: 3123000, subLabel: '미증빙 5건' },
          { label: '상품권', amount: 3123000, subLabel: '미증빙 5건' },
          { label: '접대비', amount: 3123000, subLabel: '미증빙 5건' },
        ],
      },
      table: {
        title: '가지급금 내역',
        columns: [
          { key: 'no', label: 'No.', align: 'center' },
          { key: 'date', label: '발생일', align: 'center' },
          { key: 'classification', label: '분류', align: 'center' },
          { key: 'category', label: '구분', align: 'center' },
          { key: 'amount', label: '금액', align: 'right', format: 'currency' },
          { key: 'response', label: '대응', align: 'left' },
        ],
        data: [
          { date: '2025-12-12', classification: '카드', category: '카드명', amount: 1000000, response: '미정리' },
          { date: '2025-12-12', classification: '카드', category: '카드명', amount: 1000000, response: '미증빙' },
          { date: '2025-12-12', classification: '경조사', category: '계좌명', amount: 1000000, response: '미증빙' },
          { date: '2025-12-12', classification: '상품권', category: '계좌명', amount: 1000000, response: '미증빙' },
          { date: '2025-12-12', classification: '접대비', category: '카드명', amount: 1000000, response: '주말 카드 사용' },
          { date: '2025-12-12', classification: '접대비', category: '카드명', amount: 1000000, response: '접대비 불인정' },
          { date: '2025-12-12', classification: '카드', category: '카드명', amount: 1000000, response: '불인정 가맹점(귀금속)' },
        ],
        filters: [
          {
            key: 'classification',
            options: [
              { value: 'all', label: '전체' },
              { value: '카드', label: '카드' },
              { value: '경조사', label: '경조사' },
              { value: '상품권', label: '상품권' },
              { value: '접대비', label: '접대비' },
            ],
            defaultValue: 'all',
          },
          {
            key: 'sortOrder',
            options: [
              { value: 'all', label: '정렬' },
              { value: 'amountDesc', label: '금액 높은순' },
              { value: 'amountAsc', label: '금액 낮은순' },
              { value: 'latest', label: '최신순' },
            ],
            defaultValue: 'all',
          },
        ],
        showTotal: true,
        totalLabel: '합계',
        totalValue: 111000000,
        totalColumnKey: 'amount',
      },
    },
    cm3: {
      title: '법인세 예상 가중 상세',
      summaryCards: [
        { label: '법인세 예상 증가', value: 3123000, unit: '원' },
        { label: '인정 이자', value: 6000000, unit: '원' },
        { label: '가지급금', value: '4.5억원' },
        { label: '인정이자', value: 6000000, unit: '원' },
      ],
      comparisonSection: {
        leftBox: {
          title: '없을때 법인세',
          items: [
            { label: '과세표준', value: '3억원' },
            { label: '법인세', value: 50970000, unit: '원' },
          ],
          borderColor: 'orange',
        },
        rightBox: {
          title: '있을때 법인세',
          items: [
            { label: '과세표준', value: '3.06억원' },
            { label: '법인세', value: 54093000, unit: '원' },
          ],
          borderColor: 'blue',
        },
        vsLabel: '법인세 예상 증가',
        vsValue: 3123000,
        vsSubLabel: '법인 세율 -12.5%',
      },
      referenceTable: {
        title: '법인세 과세표준 (2024년 기준)',
        columns: [
          { key: 'bracket', label: '과세표준', align: 'left' },
          { key: 'rate', label: '세율', align: 'center' },
          { key: 'formula', label: '계산식', align: 'left' },
        ],
        data: [
          { bracket: '2억원 이하', rate: '9%', formula: '과세표준 × 9%' },
          { bracket: '2억원 초과 ~ 200억원 이하', rate: '19%', formula: '1,800만원 + (2억원 초과분 × 19%)' },
          { bracket: '200억원 초과 ~ 3,000억원 이하', rate: '21%', formula: '37.62억원 + (200억원 초과분 × 21%)' },
          { bracket: '3,000억원 초과', rate: '24%', formula: '625.62억원 + (3,000억원 초과분 × 24%)' },
        ],
      },
    },
    cm4: {
      title: '대표자 종합소득세 예상 가중 상세',
      summaryCards: [
        { label: '대표자 종합세 예상 가중', value: 3123000, unit: '원' },
        { label: '추가 세금', value: '+12.5%', isComparison: true, isPositive: false },
        { label: '가지급금', value: '4.5억원' },
        { label: '인정이자 4.6%', value: 6000000, unit: '원' },
      ],
      comparisonSection: {
        leftBox: {
          title: '가지급금 인정이자가 반영된 종합소득세',
          items: [
            { label: '현재 예상 과세표준 (근로소득+상여)', value: 6000000, unit: '원' },
            { label: '현재 적용 세율', value: '19%' },
            { label: '현재 예상 세액', value: 10000000, unit: '원' },
          ],
          borderColor: 'orange',
        },
        rightBox: {
          title: '가지급금 인정이자가 정리된 종합소득세',
          items: [
            { label: '가지급금 정리 시 예상 과세표준 (근로소득+상여)', value: 6000000, unit: '원' },
            { label: '가지급금 정리 시 적용 세율', value: '19%' },
            { label: '가지급금 정리 시 예상 세액', value: 10000000, unit: '원' },
          ],
          borderColor: 'blue',
        },
        vsLabel: '종합소득세 예상 절감',
        vsValue: 3123000,
        vsSubLabel: '감소 세금 -12.5%',
        vsBreakdown: [
          { label: '종합소득세', value: -2000000, unit: '원' },
          { label: '지방소득세', value: -200000, unit: '원' },
          { label: '4대 보험', value: -1000000, unit: '원' },
        ],
      },
      referenceTable: {
        title: '종합소득세 과세표준 (2024년 기준)',
        columns: [
          { key: 'bracket', label: '과세표준', align: 'left' },
          { key: 'rate', label: '세율', align: 'center' },
          { key: 'deduction', label: '누진공제', align: 'right' },
          { key: 'formula', label: '계산식', align: 'left' },
        ],
        data: [
          { bracket: '1,400만원 이하', rate: '6%', deduction: '-', formula: '과세표준 × 6%' },
          { bracket: '1,400만원 초과 ~ 5,000만원 이하', rate: '15%', deduction: '126만원', formula: '과세표준 × 15% - 126만원' },
          { bracket: '5,000만원 초과 ~ 8,800만원 이하', rate: '24%', deduction: '576만원', formula: '과세표준 × 24% - 576만원' },
          { bracket: '8,800만원 초과 ~ 1.5억원 이하', rate: '35%', deduction: '1,544만원', formula: '과세표준 × 35% - 1,544만원' },
          { bracket: '1.5억원 초과 ~ 3억원 이하', rate: '38%', deduction: '1,994만원', formula: '과세표준 × 38% - 1,994만원' },
          { bracket: '3억원 초과 ~ 5억원 이하', rate: '40%', deduction: '2,594만원', formula: '과세표준 × 40% - 2,594만원' },
          { bracket: '5억원 초과 ~ 10억원 이하', rate: '42%', deduction: '3,594만원', formula: '과세표준 × 42% - 3,594만원' },
          { bracket: '10억원 초과', rate: '45%', deduction: '6,594만원', formula: '과세표준 × 45% - 6,594만원' },
        ],
      },
    },
  };

  return configs[cardId] || null;
}
