/**
 * 공과관리 타입 정의
 */

/**
 * 공과 상태
 */
export type UtilityStatus = 'scheduled' | 'issued' | 'completed' | 'expired';

/**
 * 공과 데이터
 */
export interface Utility {
  /** 공과 ID */
  id: string;
  /** 공과번호 */
  utilityNumber: string;
  /** 거래처 ID */
  partnerId: string;
  /** 거래처명 */
  partnerName: string;
  /** 현장 ID */
  siteId: string;
  /** 현장명 */
  siteName: string;
  /** 공사PM ID */
  constructionPMId: string;
  /** 공사PM */
  constructionPM: string;
  /** 공과 유형 (품목유형의 공과인 목록) */
  utilityType: string;
  /** 공과예정일시 */
  scheduledDate: string;
  /** 금액 */
  amount: number;
  /** 작업반장 ID */
  workTeamLeaderId: string;
  /** 작업반장 */
  workTeamLeader: string;
  /** 시공투입일 */
  constructionStartDate: string;
  /** 상태 */
  status: UtilityStatus;
  /** 기간 (시작일) - 달력용 */
  periodStart: string;
  /** 기간 (종료일) - 달력용 */
  periodEnd: string;
  /** 생성일 */
  createdAt: string;
  /** 수정일 */
  updatedAt: string;
}

/**
 * 공과 통계 (상단 카드)
 */
export interface UtilityStats {
  /** 전체 계약 */
  totalContract: number;
  /** 계약 대기 */
  contractWaiting: number;
  /** 계약 완료 */
  contractComplete: number;
}

/**
 * 공과 상태 옵션
 */
export const UTILITY_STATUS_OPTIONS = [
  { value: 'all', label: '전체' },
  { value: 'scheduled', label: '공과예정' },
  { value: 'issued', label: '공과발행' },
  { value: 'completed', label: '공과완료' },
  { value: 'expired', label: '공과만료' },
] as const;

/**
 * 공과 상태 라벨
 */
export const UTILITY_STATUS_LABELS: Record<UtilityStatus, string> = {
  scheduled: '공과예정',
  issued: '공과발행',
  completed: '공과완료',
  expired: '공과만료',
};

/**
 * 공과 상태 스타일
 */
export const UTILITY_STATUS_STYLES: Record<UtilityStatus, string> = {
  scheduled: 'bg-yellow-100 text-yellow-800',
  issued: 'bg-blue-100 text-blue-800',
  completed: 'bg-green-100 text-green-800',
  expired: 'bg-red-100 text-red-800',
};

/**
 * 정렬 옵션
 */
export const UTILITY_SORT_OPTIONS = [
  { value: 'latest', label: '최신순' },
  { value: 'oldest', label: '등록순' },
  { value: 'partnerNameDesc', label: '거래처명 내림차순' },
  { value: 'issuedDate', label: '공과발행일' },
  { value: 'completedDate', label: '공과완료' },
] as const;

/**
 * 스케줄 색상 팔레트 (10가지 고정 색상)
 */
export const SCHEDULE_COLOR_PALETTE = [
  { name: 'blue', bg: 'bg-blue-500', text: 'text-white', hex: '#3b82f6' },
  { name: 'green', bg: 'bg-green-500', text: 'text-white', hex: '#22c55e' },
  { name: 'yellow', bg: 'bg-yellow-500', text: 'text-white', hex: '#eab308' },
  { name: 'red', bg: 'bg-red-500', text: 'text-white', hex: '#ef4444' },
  { name: 'purple', bg: 'bg-purple-500', text: 'text-white', hex: '#a855f7' },
  { name: 'pink', bg: 'bg-pink-500', text: 'text-white', hex: '#ec4899' },
  { name: 'orange', bg: 'bg-orange-500', text: 'text-white', hex: '#f97316' },
  { name: 'teal', bg: 'bg-teal-500', text: 'text-white', hex: '#14b8a6' },
  { name: 'indigo', bg: 'bg-indigo-500', text: 'text-white', hex: '#6366f1' },
  { name: 'cyan', bg: 'bg-cyan-500', text: 'text-white', hex: '#06b6d4' },
] as const;

/**
 * 공사PM별 색상 매핑
 */
const CONSTRUCTION_PM_COLOR_MAP: Record<string, string> = {
  '홍길동': 'blue',
  '김철수': 'green',
  '이영희': 'pink',
  '박민수': 'purple',
};

/**
 * 공사PM 이름 기반 스케줄 색상 반환
 */
export function getScheduleColorByPM(pmName: string): string {
  if (CONSTRUCTION_PM_COLOR_MAP[pmName]) {
    return CONSTRUCTION_PM_COLOR_MAP[pmName];
  }

  let hash = 0;
  for (let i = 0; i < pmName.length; i++) {
    hash = pmName.charCodeAt(i) + ((hash << 5) - hash);
  }
  const index = Math.abs(hash) % SCHEDULE_COLOR_PALETTE.length;
  return SCHEDULE_COLOR_PALETTE[index].name;
}

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

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

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

/**
 * 목업 공사PM 목록
 */
export const MOCK_CONSTRUCTION_PM: FilterOption[] = [
  { value: '1', label: '홍길동' },
  { value: '2', label: '김철수' },
  { value: '3', label: '이영희' },
  { value: '4', label: '박민수' },
];

/**
 * 목업 공과 유형 목록 (품목유형의 공과인 목록)
 */
export const MOCK_UTILITY_TYPES: FilterOption[] = [
  { value: '1', label: '전기공과' },
  { value: '2', label: '수도공과' },
  { value: '3', label: '가스공과' },
  { value: '4', label: '통신공과' },
  { value: '5', label: '난방공과' },
];

/**
 * 목업 작업반장 목록
 */
export const MOCK_WORK_TEAM_LEADERS: FilterOption[] = [
  { value: '1', label: '이반장' },
  { value: '2', label: '김반장' },
  { value: '3', label: '박반장' },
  { value: '4', label: '최반장' },
];
