/**
 * 기성청구관리 타입 정의
 */

/**
 * 기성청구 상태
 */
export type ProgressBillingStatus =
  | 'billing_waiting' // 기성청구대기
  | 'approval_waiting' // 승인대기
  | 'constructor_sent' // 건설사전송
  | 'billing_complete'; // 기성청구완료

/**
 * 기성청구 상태 옵션
 */
export const PROGRESS_BILLING_STATUS_OPTIONS = [
  { value: 'all', label: '전체' },
  { value: 'billing_waiting', label: '기성청구대기' },
  { value: 'approval_waiting', label: '승인대기' },
  { value: 'constructor_sent', label: '건설사전송' },
  { value: 'billing_complete', label: '기성청구완료' },
] as const;

/**
 * 기성청구 상태 라벨
 */
export const PROGRESS_BILLING_STATUS_LABELS: Record<ProgressBillingStatus, string> = {
  billing_waiting: '기성청구대기',
  approval_waiting: '승인대기',
  constructor_sent: '건설사전송',
  billing_complete: '기성청구완료',
};

/**
 * 기성청구 상태 스타일
 */
export const PROGRESS_BILLING_STATUS_STYLES: Record<ProgressBillingStatus, string> = {
  billing_waiting: 'bg-yellow-100 text-yellow-800',
  approval_waiting: 'bg-blue-100 text-blue-800',
  constructor_sent: 'bg-purple-100 text-purple-800',
  billing_complete: 'bg-green-100 text-green-800',
};

/**
 * 정렬 옵션
 */
export const PROGRESS_BILLING_SORT_OPTIONS = [
  { value: 'latest', label: '최신순' },
  { value: 'oldest', label: '등록순' },
  { value: 'partnerNameAsc', label: '거래처명 오름차순' },
  { value: 'partnerNameDesc', label: '거래처명 내림차순' },
  { value: 'siteNameAsc', label: '현장명 오름차순' },
  { value: 'siteNameDesc', label: '현장명 내림차순' },
] as const;

/**
 * 기성청구 항목 인터페이스
 */
export interface ProgressBilling {
  id: string;
  billingNumber: string;
  partnerId: string;
  partnerName: string;
  siteId: string;
  siteName: string;
  round: number;
  billingYearMonth: string;
  previousBilling: number;
  currentBilling: number;
  cumulativeBilling: number;
  status: ProgressBillingStatus;
  createdAt: string;
  updatedAt: string;
}

/**
 * 기성청구 통계 인터페이스
 */
export interface ProgressBillingStats {
  total: number;
  contractWaiting: number;
  contractComplete: number;
}

/**
 * 목업 거래처 목록
 */
export const MOCK_PARTNERS = [
  { value: '1', label: '(주)대한건설' },
  { value: '2', label: '삼성물산' },
  { value: '3', label: '현대건설' },
  { value: '4', label: 'GS건설' },
  { value: '5', label: '대림산업' },
];

/**
 * 목업 현장 목록
 */
export const MOCK_SITES = [
  { value: '1', label: '강남 오피스빌딩 신축' },
  { value: '2', label: '판교 데이터센터' },
  { value: '3', label: '송도 물류센터' },
  { value: '4', label: '인천공항 터미널' },
  { value: '5', label: '부산항 창고' },
];

/**
 * 거래처별 현장 매핑
 */
export const PARTNER_SITES_MAP: Record<string, typeof MOCK_SITES> = {
  '1': [
    { value: '1', label: '강남 오피스빌딩 신축' },
    { value: '2', label: '판교 데이터센터' },
  ],
  '2': [
    { value: '3', label: '송도 물류센터' },
  ],
  '3': [
    { value: '4', label: '인천공항 터미널' },
    { value: '5', label: '부산항 창고' },
  ],
  '4': [
    { value: '1', label: '강남 오피스빌딩 신축' },
    { value: '3', label: '송도 물류센터' },
  ],
  '5': [
    { value: '2', label: '판교 데이터센터' },
    { value: '4', label: '인천공항 터미널' },
  ],
};

/**
 * 필터 옵션 공통 타입
 */
export interface FilterOption {
  value: string;
  label: string;
}

/**
 * 기성청구 내역 아이템 (테이블 로우)
 */
export interface ProgressBillingItem {
  id: string;
  /** 시공번호 */
  constructionNumber: string;
  /** 명칭 */
  name: string;
  /** 제품 */
  product: string;
  /** 가로 */
  width: number;
  /** 세로 */
  height: number;
  /** 작업반장 */
  workTeamLeader: string;
  /** 시공투입일 */
  constructionStartDate: string;
  /** 시공완료일 */
  constructionEndDate: string;
  /** 수량 */
  quantity: number;
  /** 금회기성 */
  currentBilling: number;
  /** 상태 */
  status: string;
  /** 사진 URL 목록 (최대 2장) */
  photos: string[];
}

/**
 * 사진대지 아이템 (테이블 로우)
 */
export interface PhotoItem {
  id: string;
  /** 시공번호 */
  constructionNumber: string;
  /** 명칭 */
  name: string;
  /** 사진 URL 목록 (2장) */
  photos: string[];
  /** 선택된 사진 인덱스 */
  selectedPhotoIndex?: number;
}

/**
 * 기성청구 상세 데이터
 */
export interface ProgressBillingDetail {
  /** ID */
  id: string;
  /** 기성청구번호 */
  billingNumber: string;
  /** 회차 */
  billingRound: number;
  /** 기성청구연월 */
  billingYearMonth: string;
  /** 상태 */
  status: ProgressBillingStatus;
  /** 거래처 ID */
  partnerId: string;
  /** 거래처명 */
  partnerName: string;
  /** 현장명 */
  siteName: string;
  /** 계약번호 */
  contractNumber: string;
  /** 계약 ID */
  contractId: string;
  /** 공사PM */
  constructionPM: string;
  /** 공사담당자 목록 */
  constructionManagers: string[];
  /** 기성청구 내역 목록 */
  billingItems: ProgressBillingItem[];
  /** 사진대지 목록 */
  photoItems: PhotoItem[];
  /** 생성일 */
  createdAt: string;
  /** 수정일 */
  updatedAt: string;
}

/**
 * 기성청구 상세 폼 데이터
 */
export interface ProgressBillingDetailFormData {
  /** 기성청구번호 */
  billingNumber: string;
  /** 회차 */
  billingRound: number;
  /** 기성청구연월 */
  billingYearMonth: string;
  /** 상태 */
  status: ProgressBillingStatus;
  /** 거래처 ID */
  partnerId: string;
  /** 거래처명 */
  partnerName: string;
  /** 현장명 */
  siteName: string;
  /** 계약번호 */
  contractNumber: string;
  /** 계약 ID */
  contractId: string;
  /** 공사PM */
  constructionPM: string;
  /** 공사담당자 목록 */
  constructionManagers: string[];
  /** 기성청구 내역 목록 */
  billingItems: ProgressBillingItem[];
  /** 사진대지 목록 */
  photoItems: PhotoItem[];
}

/**
 * 목업 명칭 목록
 */
export const MOCK_BILLING_NAMES: FilterOption[] = [
  { value: '1', label: '제품명 ▼' },
  { value: '2', label: '강봉A' },
  { value: '3', label: '강봉B' },
  { value: '4', label: '철근A' },
  { value: '5', label: '철근B' },
];

/**
 * 빈 기성청구 내역 아이템 생성
 */
export function getEmptyProgressBillingItem(): ProgressBillingItem {
  return {
    id: String(Date.now()),
    constructionNumber: '',
    name: '',
    product: '',
    width: 0,
    height: 0,
    workTeamLeader: '',
    constructionStartDate: '',
    constructionEndDate: '',
    quantity: 0,
    currentBilling: 0,
    status: '',
    photos: [],
  };
}

/**
 * 빈 사진대지 아이템 생성
 */
export function getEmptyPhotoItem(): PhotoItem {
  return {
    id: String(Date.now()),
    constructionNumber: '',
    name: '',
    photos: [],
    selectedPhotoIndex: undefined,
  };
}

/**
 * 빈 기성청구 상세 폼 데이터 생성
 */
export function getEmptyProgressBillingDetailFormData(): ProgressBillingDetailFormData {
  return {
    billingNumber: '',
    billingRound: 1,
    billingYearMonth: '',
    status: 'billing_waiting',
    partnerId: '',
    partnerName: '',
    siteName: '',
    contractNumber: '',
    contractId: '',
    constructionPM: '',
    constructionManagers: [],
    billingItems: [],
    photoItems: [],
  };
}

/**
 * ProgressBillingDetail을 폼 데이터로 변환
 */
export function progressBillingDetailToFormData(
  detail: ProgressBillingDetail
): ProgressBillingDetailFormData {
  return {
    billingNumber: detail.billingNumber,
    billingRound: detail.billingRound,
    billingYearMonth: detail.billingYearMonth,
    status: detail.status,
    partnerId: detail.partnerId,
    partnerName: detail.partnerName,
    siteName: detail.siteName,
    contractNumber: detail.contractNumber,
    contractId: detail.contractId,
    constructionPM: detail.constructionPM,
    constructionManagers: detail.constructionManagers,
    billingItems: detail.billingItems,
    photoItems: detail.photoItems,
  };
}

/**
 * 목업 기성청구 상세 데이터
 */
export const MOCK_PROGRESS_BILLING_DETAIL: ProgressBillingDetail = {
  id: '1',
  billingNumber: '123123',
  billingRound: 1,
  billingYearMonth: '2025년 10월',
  status: 'billing_waiting',
  partnerId: '1',
  partnerName: '현장명',
  siteName: '현장명',
  contractNumber: '123123',
  contractId: '1',
  constructionPM: '이름',
  constructionManagers: ['이름', '이름', '이름'],
  billingItems: [
    {
      id: '1',
      constructionNumber: '123123',
      name: 'FSS801(주차장)',
      product: '제품명 ▼',
      width: 2500,
      height: 3200,
      workTeamLeader: '홍길동',
      constructionStartDate: '2025-12-15',
      constructionEndDate: '2025-12-15',
      quantity: 100,
      currentBilling: 1000000,
      status: '시공완료',
      photos: [],
    },
    {
      id: '2',
      constructionNumber: '123123',
      name: 'FSS801(주차장)',
      product: '제품명 ▼',
      width: 2500,
      height: 3200,
      workTeamLeader: '홍길동',
      constructionStartDate: '2025-12-15',
      constructionEndDate: '2025-12-15',
      quantity: 100,
      currentBilling: 1000000,
      status: '시공진행',
      photos: [],
    },
    {
      id: '3',
      constructionNumber: '123123',
      name: 'FSS801(주차장)',
      product: '제품명 ▼',
      width: 2500,
      height: 3200,
      workTeamLeader: '홍길동',
      constructionStartDate: '2025-12-15',
      constructionEndDate: '2025-12-15',
      quantity: 100,
      currentBilling: 1000000,
      status: '시공완료',
      photos: [],
    },
    {
      id: '4',
      constructionNumber: '123123',
      name: 'FSS801(주차장)',
      product: '제품명 ▼',
      width: 2500,
      height: 3200,
      workTeamLeader: '홍길동',
      constructionStartDate: '2025-12-15',
      constructionEndDate: '2025-12-15',
      quantity: 100,
      currentBilling: 1000000,
      status: '시공진행',
      photos: [],
    },
    {
      id: '5',
      constructionNumber: '123123',
      name: 'FSS801(주차장)',
      product: '제품명 ▼',
      width: 2500,
      height: 3200,
      workTeamLeader: '홍길동',
      constructionStartDate: '2025-12-15',
      constructionEndDate: '',
      quantity: 100,
      currentBilling: 1000000,
      status: '시공완료',
      photos: [],
    },
    {
      id: '6',
      constructionNumber: '123123',
      name: 'FSS801(주차장)',
      product: '제품명 ▼',
      width: 2500,
      height: 3200,
      workTeamLeader: '홍길동',
      constructionStartDate: '2025-12-15',
      constructionEndDate: '2025-12-15',
      quantity: 100,
      currentBilling: 1000000,
      status: '시공완료',
      photos: [],
    },
    {
      id: '7',
      constructionNumber: '123123',
      name: 'FSS801(주차장)',
      product: '제품명 ▼',
      width: 2500,
      height: 3200,
      workTeamLeader: '홍길동',
      constructionStartDate: '2025-12-15',
      constructionEndDate: '2025-12-15',
      quantity: 100,
      currentBilling: 1000000,
      status: '시공진행',
      photos: [],
    },
  ],
  photoItems: [
    {
      id: '1',
      constructionNumber: '123123',
      name: 'FSS801(주차장)',
      photos: [
        'https://placehold.co/200x150/e2e8f0/64748b?text=IMG',
        'https://placehold.co/200x150/e2e8f0/64748b?text=IMG',
      ],
      selectedPhotoIndex: 0,
    },
  ],
  createdAt: '2025-01-10T09:00:00Z',
  updatedAt: '2025-01-10T09:00:00Z',
};
