/**
 * 프로젝트 관리 타입 정의
 */

// 프로젝트 상태
export type ProjectStatus = 'in_progress' | 'completed' | 'urgent';

// 프로젝트 타입
export interface Project {
  id: string;
  contractNumber: string; // 계약번호
  partnerName: string; // 거래처명
  siteName: string; // 현장명
  contractManager: string; // 계약담당자
  constructionPM: string; // 공사PM
  totalLocations: number; // 총 개소
  contractAmount: number; // 계약금액
  progressRate: number; // 진행률 (0-100)
  accumulatedPayment: number; // 누계 기성
  startDate: string; // 프로젝트 시작일
  endDate: string; // 프로젝트 종료일
  status: ProjectStatus; // 상태
  hasUrgentIssue: boolean; // 긴급 이슈 여부
  createdAt: string;
  updatedAt: string;
}

// 프로젝트 통계
export interface ProjectStats {
  total: number; // 전체 프로젝트
  inProgress: number; // 프로젝트 진행
  completed: number; // 프로젝트 완료
}

// 프로젝트 필터
export interface ProjectFilter {
  partners?: string[]; // 거래처 (다중선택)
  sites?: string[]; // 현장 (다중선택)
  contractManagers?: string[]; // 계약담당자 (다중선택)
  constructionPMs?: string[]; // 공사PM (다중선택)
  status?: string; // 상태 (단일선택)
  sortBy?: 'latest' | 'progress' | 'register' | 'completion'; // 정렬
  page?: number;
  size?: number;
}

// 기간 탭 타입
export type PeriodTab = 'thisYear' | 'twoMonthsAgo' | 'lastMonth' | 'thisMonth' | 'yesterday' | 'today';

// 차트 뷰 모드
export type ChartViewMode = 'day' | 'week' | 'month';

// API 응답 타입
export interface ProjectListResponse {
  items: Project[];
  total: number;
  page: number;
  size: number;
  totalPages: number;
}

// 셀렉트 옵션
export interface SelectOption {
  value: string;
  label: string;
}

// 기간 탭 옵션
export const PERIOD_TAB_OPTIONS: { value: PeriodTab; label: string }[] = [
  { value: 'thisYear', label: '당해년도' },
  { value: 'twoMonthsAgo', label: '전전월' },
  { value: 'lastMonth', label: '전월' },
  { value: 'thisMonth', label: '당월' },
  { value: 'yesterday', label: '어제' },
  { value: 'today', label: '오늘' },
];

// 상태 옵션
export const STATUS_OPTIONS: SelectOption[] = [
  { value: 'all', label: '전체' },
  { value: 'in_progress', label: '진행중' },
  { value: 'completed', label: '완료' },
];

// 정렬 옵션
export const SORT_OPTIONS: SelectOption[] = [
  { value: 'latest', label: '최신순' },
  { value: 'progress', label: '진전순' },
  { value: 'register', label: '등록순' },
  { value: 'completion', label: '완성일순' },
];

// 간트차트 막대 색상
export const GANTT_BAR_COLORS = {
  completed: '#9CA3AF', // 회색 - 종료
  in_progress: '#3B82F6', // 파란색 - 진행중
  urgent: '#991B1B', // 버건디 - 긴급 이슈
} as const;

// ============================================
// 프로젝트 실행관리 상세 페이지 타입
// ============================================

// 단계 타입
export type StageType = 'bid' | 'contract' | 'order' | 'construction' | 'payment';

// 단계 라벨
export const STAGE_LABELS: Record<StageType, string> = {
  bid: '입찰',
  contract: '계약',
  order: '발주',
  construction: '시공',
  payment: '기성청구',
};

// 상세 항목 타입 (하위 목록 없는 경우)
export type DetailType =
  | 'site_briefing'      // 현장설명회
  | 'estimation'         // 건적
  | 'bid_result'         // 입찰
  | 'handover_report'    // 인수인계보고서
  | 'structure_review'   // 구조검토
  | 'completion';        // 종료

// 상세 항목 라벨 및 날짜 필드명
export const DETAIL_CONFIG: Record<DetailType, { label: string; dateLabel: string }> = {
  site_briefing: { label: '현장설명회', dateLabel: '현장설명회일' },
  estimation: { label: '건적', dateLabel: '건적완료일' },
  bid_result: { label: '입찰', dateLabel: '확정일' },
  handover_report: { label: '인수인계보고서', dateLabel: '공사PM' },
  structure_review: { label: '구조검토', dateLabel: '구조검토완료일' },
  completion: { label: '종료', dateLabel: '결선완료일' },
};

// 단계 카드 상태
export type StageCardStatus = 'waiting' | 'in_progress' | 'completed';

// 단계 카드 상태 라벨
export const STAGE_CARD_STATUS_LABELS: Record<StageCardStatus, string> = {
  waiting: '대기',
  in_progress: '진행중',
  completed: '완료',
};

// 단계 데이터
export interface Stage {
  id: string;
  type: StageType;
  siteName: string;
  status: StageCardStatus;
  date?: string;           // 해당 단계 날짜
  amount?: number;         // 금액 (계약금 등)
  count?: number;          // 개소 수
  pm?: string;             // 담당 PM
}

// 상세 항목 데이터 (하위 목록 없는 경우)
export interface StageDetail {
  id: string;
  type: DetailType;
  title: string;           // 제목 (현장명 등)
  date?: string;           // 날짜
  pm?: string;             // 담당자 (인수인계보고서용)
  status?: StageCardStatus;
}

// 프로젝트 상세 (칸반 보드용)
export interface ProjectDetail extends Project {
  stages: Stage[];              // 단계 목록
  details: StageDetail[];       // 상세 목록
  detailCategories?: DetailCategory[];  // 상세 카테고리 (시공, 이슈 아코디언)
}

// 프로젝트 종료 폼 데이터
export interface ProjectEndFormData {
  projectId: string;
  projectName: string;     // 현장명 (읽기전용)
  workDate: string;        // 결선작업일 (읽기전용)
  completionDate: string;  // 결선완료일
  status: 'in_progress' | 'completed';  // 상태
  memo: string;            // 메모
}

// 프로젝트 종료 상태 옵션
export const PROJECT_END_STATUS_OPTIONS: SelectOption[] = [
  { value: 'in_progress', label: '프로젝트 진행' },
  { value: 'completed', label: '프로젝트 완료' },
];

// ============================================
// 상세 컬럼 아코디언 구조 타입
// ============================================

// 상세 카테고리 타입 (시공, 이슈 등)
export type DetailCategoryType = 'construction' | 'issue';

// 상세 카테고리 라벨
export const DETAIL_CATEGORY_LABELS: Record<DetailCategoryType, string> = {
  construction: '시공',
  issue: '이슈',
};

// 시공 상태
export type ConstructionStatus = 'in_progress' | 'completed';

// 시공 상태 라벨
export const CONSTRUCTION_STATUS_LABELS: Record<ConstructionStatus, string> = {
  in_progress: '시공진행',
  completed: '시공완료',
};

// 이슈 상태
export type IssueStatus = 'open' | 'resolved';

// 이슈 상태 라벨
export const ISSUE_STATUS_LABELS: Record<IssueStatus, string> = {
  open: '미해결',
  resolved: '해결완료',
};

// 시공 상세 항목
export interface ConstructionItem {
  id: string;
  number: string;          // 번호 (123123)
  inputDate: string;       // 시공투입일
  status: ConstructionStatus;
}

// 이슈 상세 항목
export interface IssueItem {
  id: string;
  number: string;          // 번호
  title: string;           // 이슈 제목
  status: IssueStatus;
  createdAt: string;
}

// 상세 카테고리 데이터
export interface DetailCategory {
  type: DetailCategoryType;
  count: number;
  constructionItems?: ConstructionItem[];
  issueItems?: IssueItem[];
}

// ============================================
// 시공관리 리스트 페이지 타입
// ============================================

// 시공관리 상태
export type ConstructionManagementStatus = 'in_progress' | 'completed';

// 시공관리 상태 라벨
export const CONSTRUCTION_MANAGEMENT_STATUS_LABELS: Record<ConstructionManagementStatus, string> = {
  in_progress: '시공진행',
  completed: '시공완료',
};

// 시공관리 상태 스타일
export const CONSTRUCTION_MANAGEMENT_STATUS_STYLES: Record<ConstructionManagementStatus, string> = {
  in_progress: 'bg-yellow-100 text-yellow-800',
  completed: 'bg-green-100 text-green-800',
};

// 시공관리 리스트 아이템
export interface ConstructionManagement {
  id: string;
  constructionNumber: string;  // 시공번호
  partnerName: string;         // 거래처
  siteName: string;            // 현장명
  constructionPM: string;      // 공사PM
  workTeamLeader: string;      // 작업반장
  worker: string;              // 작업자
  workerCount: number;         // 작업자 인원수
  constructionStartDate: string;  // 시공투입일
  constructionEndDate: string | null;  // 시공완료일
  status: ConstructionManagementStatus;
  periodStart: string;         // 달력용 시작일
  periodEnd: string;           // 달력용 종료일
  createdAt: string;
  updatedAt: string;
}

// 시공관리 통계
export interface ConstructionManagementStats {
  total: number;
  inProgress: number;
  completed: number;
}

// 시공관리 필터
export interface ConstructionManagementFilter {
  partners?: string[];           // 거래처 (다중선택)
  sites?: string[];              // 현장명 (다중선택)
  constructionPMs?: string[];    // 공사PM (다중선택)
  workTeamLeaders?: string[];    // 작업반장 (다중선택)
  status?: string;               // 상태 (단일선택)
  sortBy?: string;               // 정렬
  startDate?: string;
  endDate?: string;
  page?: number;
  size?: number;
}

// 시공관리 리스트 응답
export interface ConstructionManagementListResponse {
  items: ConstructionManagement[];
  total: number;
  page: number;
  size: number;
  totalPages: number;
}

// 시공관리 상태 옵션
export const CONSTRUCTION_MANAGEMENT_STATUS_OPTIONS: SelectOption[] = [
  { value: 'all', label: '전체' },
  { value: 'in_progress', label: '시공중' },
  { value: 'completed', label: '완료' },
];

// 시공관리 정렬 옵션
export const CONSTRUCTION_MANAGEMENT_SORT_OPTIONS: SelectOption[] = [
  { value: 'latest', label: '최신순' },
  { value: 'register', label: '등록순' },
  { value: 'completionDateDesc', label: '시공완료일 최신순' },
  { value: 'partnerNameAsc', label: '거래처명 오름차' },
  { value: 'partnerNameDesc', label: '거래처명 내림차' },
];

// 시공관리 목업 거래처 목록
export const MOCK_CM_PARTNERS: SelectOption[] = [
  { value: 'partner1', label: '대한건설' },
  { value: 'partner2', label: '삼성시공' },
  { value: 'partner3', label: 'LG건설' },
  { value: 'partner4', label: '현대건설' },
  { value: 'partner5', label: 'SK건설' },
];

// 시공관리 목업 현장 목록
export const MOCK_CM_SITES: SelectOption[] = [
  { value: 'site1', label: '서울 강남 현장' },
  { value: 'site2', label: '부산 해운대 현장' },
  { value: 'site3', label: '대전 유성 현장' },
  { value: 'site4', label: '인천 송도 현장' },
  { value: 'site5', label: '광주 북구 현장' },
];

// 시공관리 목업 공사PM 목록
export const MOCK_CM_CONSTRUCTION_PM: SelectOption[] = [
  { value: 'pm1', label: '김철수' },
  { value: 'pm2', label: '박민수' },
  { value: 'pm3', label: '정대리' },
  { value: 'pm4', label: '윤대리' },
  { value: 'pm5', label: '오차장' },
];

// 시공관리 목업 작업반장 목록
export const MOCK_CM_WORK_TEAM_LEADERS: SelectOption[] = [
  { value: 'leader1', label: '이반장' },
  { value: 'leader2', label: '김반장' },
  { value: 'leader3', label: '박반장' },
  { value: 'leader4', label: '최반장' },
  { value: 'leader5', label: '정반장' },
];

// 시공관리 달력 색상 (작업반장별)
export const getConstructionScheduleColor = (workTeamLeader: string): string => {
  const colorMap: Record<string, string> = {
    '이반장': '#3B82F6', // blue
    '김반장': '#EF4444', // red
    '박반장': '#22C55E', // green
    '최반장': '#F59E0B', // amber
    '정반장': '#8B5CF6', // purple
  };
  return colorMap[workTeamLeader] || '#6B7280'; // 기본 gray
};

// ============================================
// 시공 상세 페이지 타입
// ============================================

// 작업자 정보
export interface WorkerInfo {
  id: string;
  workDate: string;        // 작업일
  workers: string[];       // 작업자 목록 (다중선택)
}

// 공과 정보
export interface WorkProgressInfo {
  id: string;
  scheduleDate: string;    // 일정 (날짜+시간)
  workName: string;        // 공과명
}

// 사진 정보
export interface PhotoInfo {
  id: string;
  url: string;
  name: string;
  uploadedAt: string;
}

// 시공 상세 데이터
export interface ConstructionManagementDetail {
  id: string;
  constructionNumber: string;    // 시공번호
  siteName: string;              // 현장
  constructionStartDate: string; // 시공투입일
  constructionEndDate: string | null;  // 시공완료일
  workTeamLeader: string;        // 작업반장
  status: ConstructionManagementStatus;

  // 작업자 정보 (동적 테이블)
  workerInfoList: WorkerInfo[];

  // 공과 정보 (동적 테이블)
  workProgressList: WorkProgressInfo[];

  // 발주서 정보
  orderNumber: string;           // 발주번호
  orderId: string;               // 발주 ID (팝업용)

  // 이슈 정보
  issueCount: number;            // 이슈 건수

  // 작업일지
  workLogContent: string;        // 작업일지 내용

  // 사진
  photos: PhotoInfo[];

  // 이슈 보고 체크 여부
  isIssueReported: boolean;

  createdAt: string;
  updatedAt: string;
}

// 시공 상세 폼 데이터 (수정용)
export interface ConstructionDetailFormData {
  workTeamLeader: string;
  workerInfoList: WorkerInfo[];
  workProgressList: WorkProgressInfo[];
  workLogContent: string;
  photos: PhotoInfo[];
  isIssueReported: boolean;
}

// 목업 사원 목록 (작업자 선택용)
export const MOCK_EMPLOYEES: SelectOption[] = [
  { value: 'emp1', label: '홍길동' },
  { value: 'emp2', label: '김영희' },
  { value: 'emp3', label: '이철수' },
  { value: 'emp4', label: '박민수' },
  { value: 'emp5', label: '정대리' },
  { value: 'emp6', label: '최과장' },
  { value: 'emp7', label: '윤부장' },
  { value: 'emp8', label: '오차장' },
];