// 알림 도메인 타입 — 백엔드 NotificationService 응답과 1:1

import type { Paginated } from '@/types/pagination'

// 알림 타입(백엔드 NotificationType 과 동일)
export type NotificationType =
  | 'task.assigned'
  | 'task.unassigned'
  | 'task.approval_requested'
  | 'task.approved'
  | 'task.changes_requested'
  | 'task.started'
  | 'task.due_changed'
  | 'task.checkpoint_reported'
  | 'task.removed'
  | 'task.commented'
  | 'member.invited'
  | 'member.role_changed'
  | 'member.removed'

// 알림(API 원시) — 표시 문구/링크는 프론트가 type+payload 로 조립
export interface ApiNotification {
  id: string
  type: NotificationType
  payload: Record<string, unknown>
  read: boolean
  createdAt: string
}

// 목록 응답 — 페이지네이션 + 미읽음 수 동봉
export type ApiNotificationList = Paginated<ApiNotification> & {
  unreadCount: number
}

// 읽음 처리 응답
export interface UnreadCountResult {
  unreadCount: number
}

// 화면용 알림 뷰(type+payload → 톤/문구/이동경로 파생)
export interface NotificationView {
  id: string
  read: boolean
  tone: string // 좌측 점 색상(blue/amber/green/red/accent/'')
  html: string // 조립된 문구(사용자 입력은 escapeHtml 적용)
  time: string // 상대시간
  to: string | null // 클릭 시 이동 경로
}
