/**
 * 이슈관리 타입 정의
 */

// 이슈 상태
export type IssueStatus = 'received' | 'in_progress' | 'resolved' | 'unresolved';

// 이슈 중요도 (긴급, 일반)
export type IssuePriority = 'urgent' | 'normal';

// 이슈 구분 (자재, 도면, 공정, 안전, 기타)
export type IssueCategory = 'material' | 'drawing' | 'process' | 'safety' | 'etc';

// 이슈 이미지
export interface IssueImage {
  id: string;
  url: string;
  fileName: string;
  uploadedAt: string;
}

// 이슈 데이터
export interface Issue {
  id: string;
  issueNumber: string;           // 이슈번호
  constructionNumber: string;    // 시공번호
  partnerName: string;           // 거래처
  siteName: string;              // 현장
  constructionPM?: string;       // 공사PM (자동)
  constructionManagers?: string; // 공사담당자 (자동, 다중)
  category: IssueCategory;       // 구분
  title: string;                 // 제목
  content?: string;              // 내용
  reporter: string;              // 보고자
  reportDate: string;            // 이슈보고일
  resolvedDate: string | null;   // 이슈해결일
  assignee: string;              // 담당자
  priority: IssuePriority;       // 중요도
  status: IssueStatus;           // 상태
  images?: IssueImage[];         // 사진
  description?: string;          // 설명 (레거시)
  createdAt: string;
  updatedAt: string;
}

// 이슈 폼 데이터
export interface IssueFormData {
  issueNumber: string;
  constructionNumber: string;
  partnerName: string;
  siteName: string;
  constructionPM: string;
  constructionManagers: string;
  reporter: string;
  assignee: string;
  reportDate: string;
  resolvedDate: string;
  status: IssueStatus;
  category: IssueCategory;
  priority: IssuePriority;
  title: string;
  content: string;
  images: IssueImage[];
}

// 이슈 통계
export interface IssueStats {
  received: number;     // 접수
  inProgress: number;   // 처리중
  resolved: number;     // 해결완료
  unresolved: number;   // 미해결
}

// 이슈 필터
export interface IssueFilter {
  partners?: string[];          // 거래처 (다중선택)
  sites?: string[];             // 현장 (다중선택)
  categories?: string[];        // 구분 (다중선택)
  reporters?: string[];         // 보고자 (다중선택)
  assignees?: string[];         // 담당자 (다중선택)
  priority?: string;            // 중요도 (단일선택)
  status?: string;              // 상태 (단일선택)
  sortBy?: string;              // 정렬
  startDate?: string;
  endDate?: string;
  page?: number;
  size?: number;
}

// API 응답
export interface IssueListResponse {
  items: Issue[];
  total: number;
  page: number;
  size: number;
  totalPages: number;
}

// 상태 옵션
export const ISSUE_STATUS_OPTIONS = [
  { value: 'all', label: '전체' },
  { value: 'received', label: '접수' },
  { value: 'in_progress', label: '처리중' },
  { value: 'resolved', label: '해결완료' },
  { value: 'unresolved', label: '미해결' },
];

// 상태 라벨
export const ISSUE_STATUS_LABELS: Record<IssueStatus, string> = {
  received: '접수',
  in_progress: '처리중',
  resolved: '해결완료',
  unresolved: '미해결',
};

// 상태 스타일
export const ISSUE_STATUS_STYLES: Record<IssueStatus, string> = {
  received: 'bg-blue-100 text-blue-700',
  in_progress: 'bg-yellow-100 text-yellow-700',
  resolved: 'bg-green-100 text-green-700',
  unresolved: 'bg-red-100 text-red-700',
};

// 중요도 옵션 (긴급, 일반)
export const ISSUE_PRIORITY_OPTIONS = [
  { value: 'all', label: '전체' },
  { value: 'urgent', label: '긴급' },
  { value: 'normal', label: '일반' },
];

// 중요도 라벨
export const ISSUE_PRIORITY_LABELS: Record<IssuePriority, string> = {
  urgent: '긴급',
  normal: '일반',
};

// 중요도 스타일
export const ISSUE_PRIORITY_STYLES: Record<IssuePriority, string> = {
  urgent: 'bg-red-100 text-red-700',
  normal: 'bg-gray-100 text-gray-700',
};

// 구분 옵션 (자재, 도면, 공정, 안전, 기타)
export const ISSUE_CATEGORY_OPTIONS = [
  { value: 'all', label: '전체' },
  { value: 'material', label: '자재' },
  { value: 'drawing', label: '도면' },
  { value: 'process', label: '공정' },
  { value: 'safety', label: '안전' },
  { value: 'etc', label: '기타' },
];

// 구분 라벨
export const ISSUE_CATEGORY_LABELS: Record<IssueCategory, string> = {
  material: '자재',
  drawing: '도면',
  process: '공정',
  safety: '안전',
  etc: '기타',
};

// 정렬 옵션
export const ISSUE_SORT_OPTIONS = [
  { value: 'latest', label: '최신순' },
  { value: 'oldest', label: '오래된순' },
  { value: 'reportDate', label: '보고일순' },
  { value: 'priorityHigh', label: '중요도 높은순' },
  { value: 'priorityLow', label: '중요도 낮은순' },
];

// Mock 거래처 데이터
export const MOCK_ISSUE_PARTNERS = [
  { value: 'partner1', label: '대한건설' },
  { value: 'partner2', label: '삼성시공' },
  { value: 'partner3', label: 'LG건설' },
  { value: 'partner4', label: '현대건설' },
  { value: 'partner5', label: 'SK건설' },
];

// Mock 현장 데이터
export const MOCK_ISSUE_SITES = [
  { value: 'site1', label: '서울 강남 현장' },
  { value: 'site2', label: '부산 해운대 현장' },
  { value: 'site3', label: '대전 유성 현장' },
  { value: 'site4', label: '인천 송도 현장' },
  { value: 'site5', label: '광주 북구 현장' },
];

// Mock 보고자 데이터
export const MOCK_ISSUE_REPORTERS = [
  { value: 'reporter1', label: '홍길동' },
  { value: 'reporter2', label: '김철수' },
  { value: 'reporter3', label: '이영희' },
  { value: 'reporter4', label: '박민수' },
  { value: 'reporter5', label: '최대리' },
];

// Mock 담당자 데이터
export const MOCK_ISSUE_ASSIGNEES = [
  { value: 'assignee1', label: '김과장' },
  { value: 'assignee2', label: '이부장' },
  { value: 'assignee3', label: '박대리' },
  { value: 'assignee4', label: '정차장' },
  { value: 'assignee5', label: '송이사' },
];

// Mock 시공번호 데이터 (상세 폼용)
export const MOCK_CONSTRUCTION_NUMBERS = [
  { value: 'CON-001', label: 'CON-001', partnerName: '대한건설', siteName: '서울 강남 현장', pm: '홍길동', managers: '홍길동, 김철수, 이영희' },
  { value: 'CON-002', label: 'CON-002', partnerName: '삼성시공', siteName: '부산 해운대 현장', pm: '김철수', managers: '김철수, 박민수' },
  { value: 'CON-003', label: 'CON-003', partnerName: 'LG건설', siteName: '대전 유성 현장', pm: '이영희', managers: '이영희, 최대리' },
  { value: 'CON-004', label: 'CON-004', partnerName: '현대건설', siteName: '인천 송도 현장', pm: '박민수', managers: '박민수, 홍길동' },
  { value: 'CON-005', label: 'CON-005', partnerName: 'SK건설', siteName: '광주 북구 현장', pm: '최대리', managers: '최대리, 김철수, 이영희' },
];

// 폼용 상태 옵션 (전체 제외)
export const ISSUE_STATUS_FORM_OPTIONS = [
  { value: 'received', label: '접수' },
  { value: 'in_progress', label: '처리중' },
  { value: 'resolved', label: '해결완료' },
  { value: 'unresolved', label: '미해결' },
];

// 폼용 중요도 옵션 (전체 제외)
export const ISSUE_PRIORITY_FORM_OPTIONS = [
  { value: 'urgent', label: '긴급' },
  { value: 'normal', label: '일반' },
];

// 폼용 구분 옵션 (전체 제외)
export const ISSUE_CATEGORY_FORM_OPTIONS = [
  { value: 'material', label: '자재' },
  { value: 'drawing', label: '도면' },
  { value: 'process', label: '공정' },
  { value: 'safety', label: '안전' },
  { value: 'etc', label: '기타' },
];