/**
 * Relay 화면용 뷰 타입 정의.
 * (구 목업 정적 데이터는 백엔드 연동 완료로 제거됨 — store/composable 가 실제 응답을 사용)
 */

/** 업무 상태 */
export type TaskStatus = 'todo' | 'prog' | 'review' | 'done' | 'changes'

/** 사용자(멤버) */
export interface User {
  id: string
  name: string
  role: string
  /** 프로필 이미지 URL — 없으면 UserAvatar 가 placeholder 표시 */
  avatarUrl?: string | null
}

/** 첨부파일 */
export interface Attachment {
  /** 첨부 ID(API 연동 시) */
  id?: string
  name: string
  size: string
  /** 파일 아이콘 종류 */
  kind: 'pdf' | 'zip' | 'doc' | 'img'
  /** 다운로드 URL(API 연동 시) */
  url?: string
}

/** 체크리스트 카테고리(탭) — AI 추천 4개 영역과 동일 */
export type ChecklistCategory = '필수' | '관리' | '보안' | '부가'
export const CHECKLIST_CATEGORIES: ChecklistCategory[] = [
  '필수',
  '관리',
  '보안',
  '부가',
]

/** 작업자 진행 상태(자가보고) — 미착수/진행중/완료 */
export type ChecklistWorkStatus = 'todo' | 'doing' | 'done'

/** 체크리스트 항목 */
export interface ChecklistItem {
  /** 항목 ID(API 연동 시) */
  id?: string
  text: string
  done: boolean
  category: ChecklistCategory
  /** 보완 내용(수정 요청 시 항목별 입력) — 없으면 null */
  reviewNote?: string | null
  /** 작업자 진행 상태(자가보고) */
  workStatus?: ChecklistWorkStatus
}

/** 중간 점검일(표시용) */
export interface TaskCheckpointView {
  id: string
  /** ISO — 보고 가능 구간(점검일~마감) 계산용 */
  checkAt: string
  /** 표시 라벨 */
  dateLabel: string
}

/** 중간 점검 보고(스냅샷, 표시용) */
export interface CheckpointReportView {
  id: string
  checkpointId: string
  reporterName: string
  note: string | null
  items: { text: string; category: ChecklistCategory; workStatus: ChecklistWorkStatus }[]
  /** 점검일 표시 */
  dateLabel: string
  /** 보고 시각(상대) */
  timeLabel: string
}

/** 프로젝트 — 작업의 기본 단위(우선) */
export interface Project {
  /** 라우팅 식별자(UUID) */
  id: string
  name: string
  desc: string
  members: User[]
  /** 멤버 스택 초과분(+N) */
  moreCount: number
  updatedAgo: string
  doneCount: number
  totalCount: number
  progressPct: number
  progressLevel: 'done' | 'mid' | 'low'
  progressLabel: string
  /** admin 여부 — 단건 조회에서만 채워짐 */
  canManage?: boolean
  /** 소유자 여부 — 프로젝트 삭제 권한 */
  isOwner?: boolean
}

/** 프로젝트의 업무 목록 행 */
export interface ProjectTask {
  id: number
  title: string
  status: TaskStatus
  /** 마감 라벨(D-3 / 2일 지남 / 6월 9일 완료 등) */
  dueLabel?: string
  overdue?: boolean
  /** 체크리스트 [완료, 전체] */
  checklist?: [number, number]
  /** 코멘트 수 */
  comments?: number
  /** 첨부 파일 수 */
  files?: number
  assignees: User[]
}

/** 댓글의 답글 */
export interface Reply {
  /** 답글 ID(API 연동 시) */
  id?: string
  author: User
  time: string
  text: string
}

/** 댓글 */
export interface Comment {
  /** 댓글 ID(API 연동 시) */
  id?: string
  author: User
  /** 작성자 역할 배지(예: 지시자) */
  roleBadge?: string
  time: string
  text: string
  file?: string
  replies: Reply[]
}

/** 활동 타임라인 항목 */
export interface Activity {
  /** 아이콘 색상 톤 */
  tone: '' | 'green' | 'amber' | 'blue' | 'accent'
  /** 아이콘 종류 */
  icon: 'check-circle' | 'check' | 'paperclip' | 'calendar' | 'users' | 'flag'
  /** 본문(굵게 처리는 컴포넌트에서 b 태그로) */
  html: string
  time: string
  file?: string
  statusFrom?: string
  statusTo?: string
}

/** 업무 상세 */
export interface TaskDetail {
  id: number
  projectId: string
  projectName: string
  title: string
  status: TaskStatus
  statusLabel: string
  /** 본문 문단 (멘션은 @로 시작) */
  content: string[]
  checklist: ChecklistItem[]
  comments: Comment[]
  activities: Activity[]
  assignees: User[]
  issuer: User
  dueLabel: string
  dday: string
  /** 원본 마감 ISO(중간 점검 보고 가능 구간 계산용) — 없으면 null */
  dueAt: string | null
  files: Attachment[]
  /** 승인 요청 정보(승인 대기 상태일 때) */
  approval?: {
    requester: string
    requestedAgo: string
    note: string
  }
  /** 수정 요청 메시지(수정 요청 상태일 때) */
  changesNote?: string
  issuedLabel: string
  /** 중간 점검일 목록 */
  checkpoints: TaskCheckpointView[]
  /** 중간 점검 보고 이력(최신순) */
  checkpointReports: CheckpointReportView[]
}

/** D-day 강조 단계 */
export type DdayLevel = 'urgent' | 'soon' | 'calm'

/** 내 업무 목록 행 */
export interface MyTaskRow {
  id: number
  title: string
  status: TaskStatus
  projectName: string
  /** 라우팅용 프로젝트 식별자 */
  projectId?: string
  /** 담당자 미니 아바타(지시 뷰) */
  assignees?: User[]
  /** 보조 텍스트(예: "지시 · 한승우", "정민호", "박지훈님이 2시간 전 승인 요청") */
  metaText?: string
  /** metaText 를 amber 강조로 표시할지 (승인 요청 등) */
  metaAttn?: boolean
  /** 체크리스트 [완료, 전체] */
  checklist?: [number, number]
  /** 마감/완료 라벨(예: "6월 18일", "6월 9일 승인됨") */
  dueLabel?: string
  dday?: string
  ddayLevel?: DdayLevel
  /** 마감 지남(빨강 강조) */
  overdue?: boolean
  /** 배지 텍스트(예: 진행 중 / 승인 대기). reviewBtn 이 true 면 미표시 */
  statusLabel?: string
  /** 검토하기 버튼 표시(지시 뷰의 승인 대기) */
  reviewBtn?: boolean
  /** 완료 행 스타일 */
  done?: boolean
}

/** 상태 그룹 */
export interface MyTaskGroup {
  key: TaskStatus
  label: string
  /** 그룹 헤더 우측 보조 문구(예: "· 내 승인 필요") */
  action?: string
  /** 강조 목록 스타일(amber 테두리) */
  attn?: boolean
  rows: MyTaskRow[]
}

/** 진행 중(완료 제외) 업무 수 — 탭 카운트 */
export function countActive(groups: MyTaskGroup[]): number {
  return groups.filter((g) => g.key !== 'done').reduce((sum, g) => sum + g.rows.length, 0)
}

/** 프로젝트 멤버 */
export interface ProjectMember {
  user: User
  email: string
  /** 담당 업무 수 */
  taskCount: number
  /** 권한 역할 */
  roleType: 'admin' | 'member'
  /** 현재 로그인 사용자 여부 */
  isYou?: boolean
  /** 소유자(역할 변경/제거 불가) */
  owner?: boolean
}

/** 활동 아이콘 종류(모양) */
export type ActivityIcon =
  | 'check'
  | 'pencil'
  | 'member-add'
  | 'member-check'
  | 'member-remove'
  | 'lock'
  | 'repo'

/** 활동 항목 */
export interface ProjectActivityItem {
  /** 아이콘 색상 톤 */
  tone: 'task' | 'member' | 'setting'
  /** 아이콘 모양 */
  icon: ActivityIcon
  /** 행위자 프로필 이미지 URL — 없으면 placeholder */
  avatarUrl?: string | null
  /** 행위자 식별자(멤버 필터용) — 행위자 없는 활동이면 null */
  actorId?: string | null
  /** 행위자 표시 이름(멤버 필터 드롭다운 라벨용) */
  actorName?: string | null
  /** 본문 HTML(내부 생성, 신뢰 가능 마크업) */
  html: string
  time: string
}

/** 날짜 그룹 */
export interface ProjectActivityDay {
  day: string
  items: ProjectActivityItem[]
}
