export enum NotificationType {
  // ─── PROPOSALS ────────────────────────────────
  // Fired when: proposal status changes to SIGNED
  // Who acts:   Marketing Role
  // Notifies:   Manager, Admin
  PROPOSAL_SIGNED = 'PROPOSAL_SIGNED',

  // ─── PROJECT SCHEDULE ─────────────────────────
  // Fired when: manager creates a new project schedule
  // Who acts:   Manager
  // Notifies:   Manager, Admin
  PROJECT_SCHEDULED = 'PROJECT_SCHEDULED',

  // Fired when: engineer is assigned to a schedule
  // Who acts:   Manager
  // Notifies:   That specific engineer only (personal room)
  TASK_ASSIGNED = 'TASK_ASSIGNED',

  // ─── SERVICE EXECUTION ────────────────────────
  // Fired when: engineer starts executing a task
  // Who acts:   Engineer
  // Notifies:   Manager, Admin
  EXECUTION_STARTED = 'EXECUTION_STARTED',

  // Fired when: engineer puts task on hold
  // Who acts:   Engineer
  // Notifies:   Manager, Admin-Manager, Admin
  // Priority:   URGENT 🚨
  TASK_ON_HOLD = 'TASK_ON_HOLD',

  // Fired when: engineer marks task as complete
  // Who acts:   Engineer
  // Notifies:   Manager, Admin
  TASK_COMPLETED = 'TASK_COMPLETED',

  // Fired when: manager reschedules a service
  // Who acts:   Manager
  // Notifies:   Manager, Admin, Engineer (personal)
  SERVICE_RESCHEDULED = 'SERVICE_RESCHEDULED',

  // Fired when: ALL services for a project are done
  // Who acts:   System auto-detects on last task complete
  // Notifies:   Admin-Manager, Admin
  // Priority:   ACTION REQUIRED ⚡
  SERVICE_COMPLETE_INVOICE_READY = 'SERVICE_COMPLETE_INVOICE_READY',

  // ─── PAYMENT TERMS ────────────────────────────
  // Fired when: manager creates payment terms for a proposal
  // Who acts:   Manager
  // Notifies:   Admin-Manager, Admin
  PAYMENT_TERMS_CREATED = 'PAYMENT_TERMS_CREATED',

  // Fired when: admin approves payment terms
  // Who acts:   Admin
  // Notifies:   Admin-Manager, Admin
  PAYMENT_TERMS_APPROVED = 'PAYMENT_TERMS_APPROVED',

  // ─── INVOICES ─────────────────────────────────
  // Fired when: accounts raises a new invoice
  // Who acts:   Admin-Manager / Accounts
  // Notifies:   Admin-Manager, Admin
  INVOICE_RAISED = 'INVOICE_RAISED',

  // Fired when: payment is recorded against an invoice
  // Who acts:   Admin-Manager / Accounts
  // Notifies:   Admin-Manager, Admin
  PAYMENT_RECEIVED = 'PAYMENT_RECEIVED',

  // Fired when: CRON job runs at 9AM and finds overdue invoices
  // Who acts:   System (automatic — no human)
  // Notifies:   Manager, Admin-Manager, Admin
  // Priority:   URGENT 🚨
  PAYMENT_OVERDUE = 'PAYMENT_OVERDUE',

  // ─── 🆕 AUDIT SCHEDULES ───────────────────────
  // Fired when: schedule status transitions DRAFT → PUBLISHED
  // Who acts:   Coordinator / Admin
  // Notifies:   Marketing (per row), Auditor (per row), Coordinator
  AUDIT_SCHEDULE_PUBLISHED = 'AUDIT_SCHEDULE_PUBLISHED',

  // Fired when: a single audit row is cancelled
  // Who acts:   Coordinator / Admin
  // Notifies:   Marketing, Auditor, Coordinator (of that specific row)
  // Priority:   URGENT 🚨
  AUDIT_ROW_CANCELLED = 'AUDIT_ROW_CANCELLED',

  // Fired when: a single audit row is rescheduled to a new date
  // Who acts:   Coordinator / Admin
  // Notifies:   Marketing, Auditor, Coordinator (of that specific row)
  // Priority:   URGENT 🚨
  AUDIT_ROW_RESCHEDULED = 'AUDIT_ROW_RESCHEDULED',

  // Fired when: all rows in a schedule are bulk-cancelled
  // Who acts:   Coordinator / Admin
  // Notifies:   All unique recipients across affected rows
  // Priority:   URGENT 🚨
  AUDIT_SCHEDULE_BULK_CANCELLED = 'AUDIT_SCHEDULE_BULK_CANCELLED',
  AUDIT_REQUEST_SUBMITTED = 'AUDIT_REQUEST_SUBMITTED',
  AUDIT_REQUEST_SCHEDULED = 'AUDIT_REQUEST_SCHEDULED',
  AUDIT_REQUEST_REJECTED = 'AUDIT_REQUEST_REJECTED',

  // ─── 🆕 AUDIT CHECKLISTS ──────────────────────
  // Fired when: auditor submits + notifies client of a document checklist
  // Who acts:   Auditor
  // Notifies:   Client (that company's company_users)
  CHECKLIST_READY = 'CHECKLIST_READY',

  // Fired when: client finishes uploading and submits their checklist
  // Who acts:   Client
  // Notifies:   Lead auditor on that audit
  CHECKLIST_CLIENT_SUBMITTED = 'CHECKLIST_CLIENT_SUBMITTED',

  // Fired when: auditor rejects one or more uploaded items (batched, not
  // one email per item)
  // Who acts:   Auditor
  // Notifies:   Client
  // Priority:   URGENT 🚨
  CHECKLIST_ITEMS_REJECTED = 'CHECKLIST_ITEMS_REJECTED',
  // Fired when: client uploads a document against a checklist item
  // Who acts:   Client
  // Notifies:   Lead auditor on that audit (bell + email, per upload)
  CHECKLIST_DOC_UPLOADED = 'CHECKLIST_DOC_UPLOADED',

  // Fired when: auditor sends the batched review result (approved /
  // rejected summary, or "all approved") back to the client
  // Who acts:   Auditor
  // Notifies:   Client
  CHECKLIST_REVIEW_RESULT = 'CHECKLIST_REVIEW_RESULT',
}
