/**
 * Template Access Key Enum
 * Unique keys for each template variant (email/whatsapp for different recipients)
 * Format: {PURPOSE}_{CHANNEL}_{RECIPIENT}
 * e.g., REGISTRATION_COMPLETED_EMAIL_SEEKER, REGISTRATION_COMPLETED_WATI_RM
 */
export enum CommunicationTemplateAccessKeyEnum {
  // Registration completed - Email
  REGISTRATION_COMPLETED_EMAIL_SEEKER = 'REGISTRATION_COMPLETED_EMAIL_SEEKER',
  
  // Registration completed - WhatsApp
  REGISTRATION_COMPLETED_WATI_SEEKER = 'REGISTRATION_COMPLETED_WATI_SEEKER',
  REGISTRATION_COMPLETED_WATI_RM = 'REGISTRATION_COMPLETED_WATI_RM',
  // RM notification when registration is completed WITH payment (online seat confirmed / offline seat secured at initiation)
  REGISTRATION_COMPLETED_WITH_PAYMENT_WATI_RM = 'REGISTRATION_COMPLETED_WITH_PAYMENT_WATI_RM',
  
  // Registration completed - SMS
  REGISTRATION_COMPLETED_SMS_RM = 'REGISTRATION_COMPLETED_SMS_RM',
  
  // Registration cancelled - Email
  REGISTRATION_CANCELLED_EMAIL_SEEKER = 'REGISTRATION_CANCELLED_EMAIL_SEEKER',
  REGISTRATION_CANCELLED_EMAIL_RM = 'REGISTRATION_CANCELLED_EMAIL_RM',
  REGISTRATION_CANCELLED_EMAIL_FINANCE = 'REGISTRATION_CANCELLED_EMAIL_FINANCE',
  
  // Registration cancelled - WhatsApp
  REGISTRATION_CANCELLED_WATI_SEEKER = 'REGISTRATION_CANCELLED_WATI_SEEKER',
  REGISTRATION_CANCELLED_WATI_RM = 'REGISTRATION_CANCELLED_WATI_RM',
  REGISTRATION_CANCELLED_WATI_FINANCE = 'REGISTRATION_CANCELLED_WATI_FINANCE',
  
  // Refund
  REGISTRATION_REFUND_EMAIL_FINANCE = 'REGISTRATION_REFUND_EMAIL_FINANCE',
  
  // Preference edited
  
  // Blessed/Approval related - Email
  BLESSED_EMAIL_SEEKER = 'BLESSED_EMAIL_SEEKER',
  BLESSED_NO_PAYMENT_EMAIL_SEEKER = 'BLESSED_NO_PAYMENT_EMAIL_SEEKER',
  
  // Blessed/Approval related - WhatsApp
  BLESSED_WATI_SEEKER = 'BLESSED_WATI_SEEKER',
  BLESSED_WATI_RM = 'BLESSED_WATI_RM',
  BLESSED_NO_PAYMENT_WATI_SEEKER = 'BLESSED_NO_PAYMENT_WATI_SEEKER',
  BLESSED_NO_PAYMENT_WATI_RM = 'BLESSED_NO_PAYMENT_WATI_RM',

  // Payment link (sent after basic registration is done, payment pending) - WhatsApp
  PAYMENT_LINK_WATI_SEEKER = 'PAYMENT_LINK_WATI_SEEKER',
  
  // Blessed/Approval related - SMS
  BLESSED_SMS_RM = 'BLESSED_SMS_RM',
  
  // Hold - Email
  HOLD_EMAIL_SEEKER = 'HOLD_EMAIL_SEEKER',
  RM_HOLD_EMAIL_RM = 'RM_HOLD_EMAIL_RM',
  
  // Legacy blessed keys (for backward compatibility)
  BLESSED = 'BLESSED',
  BLESSED_NO_PAYMENT = 'BLESSED_NO_PAYMENT',
  HOLD = 'HOLD',
  RM_HOLD = 'RM_HOLD',
  
  // Payment related - Email
  INVOICE_EMAIL_SEEKER = 'INVOICE_EMAIL_SEEKER',
  PAYMENT_ACKNOWLEDGEMENT_OFFLINE_EMAIL_SEEKER = 'PAYMENT_ACKNOWLEDGEMENT_OFFLINE_EMAIL_SEEKER',
  ONLINE_PAYMENT_ACKNOWLEDGEMENT_EMAIL_SEEKER = 'ONLINE_PAYMENT_ACKNOWLEDGEMENT_EMAIL_SEEKER',
  
  // Payment related - WhatsApp
  INVOICE_WATI_SEEKER = 'INVOICE_WATI_SEEKER',
  PAYMENT_ACKNOWLEDGEMENT_OFFLINE_WATI_SEEKER = 'PAYMENT_ACKNOWLEDGEMENT_OFFLINE_WATI_SEEKER',
  PAYMENT_PENDING_REMINDER_WATI_RM = 'PAYMENT_PENDING_REMINDER_WATI_RM',

  // Payment confirmed (online captured / offline realized) - WhatsApp
  ONLINE_PAYMENT_COMPLETED_WATI_SEEKER = 'ONLINE_PAYMENT_COMPLETED_WATI_SEEKER',
  OFFLINE_PAYMENT_COMPLETED_WATI_SEEKER = 'OFFLINE_PAYMENT_COMPLETED_WATI_SEEKER',
  
  // Legacy payment keys (for backward compatibility)
  INVOICE = 'INVOICE',
  PAYMENT_ACKNOWLEDGEMENT_OFFLINE = 'PAYMENT_ACKNOWLEDGEMENT_OFFLINE',
  PAYMENT_PENDING_REMINDER = 'PAYMENT_PENDING_REMINDER',
  
  // Billing related - Email
  BILLING_DETAILS_EDIT = 'BILLING_DETAILS_EDIT',
  BILLING_DETAILS_EDIT_EMAIL_SEEKER = 'BILLING_DETAILS_EDIT_EMAIL_SEEKER',
  BILLING_DETAILS_EDIT_REMOVED_EMAIL_SEEKER = 'BILLING_DETAILS_EDIT_REMOVED_EMAIL_SEEKER',
  EINVOICE_ERROR_EMAIL_SEEKER = 'EINVOICE_ERROR_EMAIL_SEEKER',
  
  // Swap related - Email
  SWAP_DEMAND_EMAIL_SEEKER = 'SWAP_DEMAND_EMAIL_SEEKER',
  SWAP_ACCEPT_EMAIL_SEEKER = 'SWAP_ACCEPT_EMAIL_SEEKER',
  SWAP_ACCEPT_NO_PAYMENT_EMAIL_SEEKER = 'SWAP_ACCEPT_NO_PAYMENT_EMAIL_SEEKER',
  
  // Swap and preference - WhatsApp
  SWAP_DEMAND_WATI_SEEKER = 'SWAP_DEMAND_WATI_SEEKER',
  
  // Legacy swap keys (for backward compatibility)
  BILLING_DETAILS_REMOVED = 'BILLING_DETAILS_REMOVED',
  EINVOICE_ERROR = 'EINVOICE_ERROR',
  
  // Travel related
  TRAVEL_PLAN_CHANGE = 'TRAVEL_PLAN_CHANGE',
  TRAVEL_PLAN_NEW = 'TRAVEL_PLAN_NEW',
  TRAVEL_PLAN_RETURN_CHANGE = 'TRAVEL_PLAN_RETURN_CHANGE',
  TRAVEL_PLAN_ONWARD_CHANGE = 'TRAVEL_PLAN_ONWARD_CHANGE',
  TRAVEL_PLAN_CHANGE_EMAIL_SEEKER = 'TRAVEL_PLAN_CHANGE_EMAIL_SEEKER',
  
  // Coordinator travel notifications - WhatsApp
  CO_ORDINATOR_TRAVEL_PLAN_CHANGE_WATI = 'CO_ORDINATOR_TRAVEL_PLAN_CHANGE_WATI',
  CO_ORDINATOR_NEW_TRAVEL_PLAN_MADE_WATI = 'CO_ORDINATOR_NEW_TRAVEL_PLAN_MADE_WATI',
  CO_ORDINATOR_ONWARD_TRAVEL_PLAN_CHANGE_WATI = 'CO_ORDINATOR_ONWARD_TRAVEL_PLAN_CHANGE_WATI',
  CO_ORDINATOR_RETURN_TRAVEL_PLAN_CHANGE_WATI = 'CO_ORDINATOR_RETURN_TRAVEL_PLAN_CHANGE_WATI',
  
  // Swap and preference - WhatsApp
  PREFERENCE_EDITED_WATI_RM = 'PREFERENCE_EDITED_WATI_RM',
  
  // Admin and notifications - WhatsApp
  ADMIN_MESSAGE_NOTIFICATION_WATI = 'ADMIN_MESSAGE_NOTIFICATION_WATI',
  
  // Legacy keys (for backward compatibility)
  SWAP_DEMAND = 'SWAP_DEMAND',
  PREFERENCE_EDITED = 'PREFERENCE_EDITED',
  ADMIN_MESSAGE_NOTIFICATION = 'ADMIN_MESSAGE_NOTIFICATION',
  
  // Generic and OTP
  GENERIC_EMAIL = 'GENERIC_EMAIL',
  OTP = 'OTP',
  
  // Program specific notifications
  FIRST_TIMER = 'FIRST_TIMER',
  CHECKLIST = 'CHECKLIST',
  PREPARATORY = 'PREPARATORY',

  // Waitlist notifications
  REGISTRATION_WAITINGLIST_WATI_SEEKER = 'REGISTRATION_WAITINGLIST_WATI_SEEKER',
  OFFLINE_REGISTRATION_WAITINGLIST_WATI_SEEKER = 'OFFLINE_REGISTRATION_WAITINGLIST_WATI_SEEKER',
  ONLINE_PAYMENT_DONE_BUT_WAITING_LIST_WATI_SEEKER = 'ONLINE_PAYMENT_DONE_BUT_WAITING_LIST_WATI_SEEKER',

  // Waitlist placement - Email
  REGISTRATION_WAITINGLIST_EMAIL_SEEKER = 'REGISTRATION_WAITINGLIST_EMAIL_SEEKER',
  OFFLINE_REGISTRATION_WAITINGLIST_EMAIL_SEEKER = 'OFFLINE_REGISTRATION_WAITINGLIST_EMAIL_SEEKER',
  ONLINE_PAYMENT_DONE_BUT_WAITING_LIST_EMAIL_SEEKER = 'ONLINE_PAYMENT_DONE_BUT_WAITING_LIST_EMAIL_SEEKER',

  // Waitlist deny - WhatsApp
  WAITLIST_DENY_WATI_SEEKER = 'WAITLIST_DENY_WATI_SEEKER',
  WAITLIST_PAID_DENY_WATI_SEEKER = 'WAITLIST_PAID_DENY_WATI_SEEKER',

  // Waitlist deny - Email
  WAITLIST_DENIED_EMAIL_SEEKER = 'WAITLIST_DENIED_EMAIL_SEEKER',
  WAITLIST_DENIED_PAID_EMAIL_SEEKER = 'WAITLIST_DENIED_PAID_EMAIL_SEEKER',

  // Waitlist release - WhatsApp (type-specific)
  WAITLIST_RELEASE_WATI_SEEKER = 'WAITLIST_RELEASE_WATI_SEEKER',
  WAITLIST_RELEASE_PAYMENT_WATI_SEEKER = 'WAITLIST_RELEASE_PAYMENT_WATI_SEEKER',
  WAITLIST_RELEASE_OFFLINE_WATI_SEEKER = 'WAITLIST_RELEASE_OFFLINE_WATI_SEEKER',
  WAITLIST_RELEASE_INVOICE_WATI_SEEKER = 'WAITLIST_RELEASE_INVOICE_WATI_SEEKER',

  // Waitlist release - Email (type-specific)
  WAITLIST_RELEASE_PAYMENT_EMAIL_SEEKER = 'WAITLIST_RELEASE_PAYMENT_EMAIL_SEEKER',
  WAITLIST_RELEASE_OFFLINE_EMAIL_SEEKER = 'WAITLIST_RELEASE_OFFLINE_EMAIL_SEEKER',
  WAITLIST_RELEASE_INVOICE_EMAIL_SEEKER = 'WAITLIST_RELEASE_INVOICE_EMAIL_SEEKER',

  // Parental consent - Email
  PARENTAL_CONSENT_EMAIL_SEEKER = 'PARENTAL_CONSENT_EMAIL_SEEKER',

  // Online session manual communications - Welcome (program-level, before the sessions start)
  WELCOME_EMAIL_SEEKER = 'WELCOME_EMAIL_SEEKER',
  WELCOME_WATI_SEEKER = 'WELCOME_WATI_SEEKER',

  // Online session manual communications - Absent
  // (regular = all sessions except the last two; pre-final = the last but one session;
  //  final = the last session)
  ABSENT_REGULAR_SESSION_EMAIL_SEEKER = 'ABSENT_REGULAR_SESSION_EMAIL_SEEKER',
  ABSENT_REGULAR_SESSION_WATI_SEEKER = 'ABSENT_REGULAR_SESSION_WATI_SEEKER',
  ABSENT_PRE_FINAL_SESSION_EMAIL_SEEKER = 'ABSENT_PRE_FINAL_SESSION_EMAIL_SEEKER',
  ABSENT_PRE_FINAL_SESSION_WATI_SEEKER = 'ABSENT_PRE_FINAL_SESSION_WATI_SEEKER',
  ABSENT_FINAL_SESSION_EMAIL_SEEKER = 'ABSENT_FINAL_SESSION_EMAIL_SEEKER',
  ABSENT_FINAL_SESSION_WATI_SEEKER = 'ABSENT_FINAL_SESSION_WATI_SEEKER',

  // Online session manual communications - Invite
  // (regular = all sessions except the last; final = the last session)
  INVITE_REGULAR_SESSION_EMAIL_SEEKER = 'INVITE_REGULAR_SESSION_EMAIL_SEEKER',
  INVITE_REGULAR_SESSION_WATI_SEEKER = 'INVITE_REGULAR_SESSION_WATI_SEEKER',
  INVITE_FINAL_SESSION_EMAIL_SEEKER = 'INVITE_FINAL_SESSION_EMAIL_SEEKER',
  INVITE_FINAL_SESSION_WATI_SEEKER = 'INVITE_FINAL_SESSION_WATI_SEEKER',

  // Online session manual communications - Value card (email only, occurrence-independent)
  VALUE_CARD_EMAIL_SEEKER = 'VALUE_CARD_EMAIL_SEEKER',

  // Online session manual communications - Program completion (occurrence-independent)
  PROGRAM_COMPLETION_EMAIL_SEEKER = 'PROGRAM_COMPLETION_EMAIL_SEEKER',
  PROGRAM_COMPLETION_WATI_SEEKER = 'PROGRAM_COMPLETION_WATI_SEEKER',

  // Online session manual communications - Common invite (program-level, staff issued a
  // generated common Zoom link; occurrence-independent)
  COMMON_INVITE_EMAIL_SEEKER = 'COMMON_INVITE_EMAIL_SEEKER',
  COMMON_INVITE_WATI_SEEKER = 'COMMON_INVITE_WATI_SEEKER',

  // Common invite — PER-SESSION variant (same audience, but scoped to one session; selected when
  // the send carries a sessionId, i.e. links generated per session). Occurrence-independent.
  COMMON_INVITE_PER_SESSION_EMAIL_SEEKER = 'COMMON_INVITE_PER_SESSION_EMAIL_SEEKER',
  COMMON_INVITE_PER_SESSION_WATI_SEEKER = 'COMMON_INVITE_PER_SESSION_WATI_SEEKER',

  // Online session manual communications - System links (program-level, email only, to ADMIN
  // users; lists the generated system/placeholder Zoom links; occurrence-independent)
  SYSTEM_LINKS_EMAIL_ADMIN = 'SYSTEM_LINKS_EMAIL_ADMIN',

  // System links — PER-SESSION variant (same audience + link table, but scoped to one session;
  // selected when the send carries a sessionId). Email only, occurrence-independent.
  SYSTEM_LINKS_PER_SESSION_EMAIL_ADMIN = 'SYSTEM_LINKS_PER_SESSION_EMAIL_ADMIN',
}
