export const ROLE_CODES = ["SUPER_ADMIN", "STAFF", "PARTICIPANT"] as const;
export type RoleCode = (typeof ROLE_CODES)[number];

export const PERMISSIONS = [
  "users.manage",
  "roles.manage",
  "participants.view",
  "participants.edit",
  "registrations.verify",
  "payments.verify",
  "sessions.manage",
  "sessions.enroll.override",
  "scanner.scan",
  "attendance.view",
  "cms.manage",
  "media.manage",
  "imports.manage",
  "exports.manage",
  "reports.view",
  "settings.manage",
  "audit.view"
] as const;
export type PermissionCode = (typeof PERMISSIONS)[number];

export type ApiOk<T> = { ok: true; data: T; correlationId: string };
export type ApiError = { ok: false; error: { code: string; message: string; details?: unknown }; correlationId: string };
export type ApiResponse<T> = ApiOk<T> | ApiError;

export type RegistrationStatus =
  | "DRAFT"
  | "SUBMITTED"
  | "PENDING_EMAIL_VERIFICATION"
  | "PENDING_PAYMENT"
  | "PAYMENT_UNDER_REVIEW"
  | "PAYMENT_REJECTED"
  | "REGISTERED"
  | "VERIFIED"
  | "CANCELLED"
  | "REFUNDED"
  | "SUSPENDED"
  | "CHECKED_IN"
  | "COMPLETED";

export type PaymentStatus = "UNPAID" | "PENDING" | "UNDER_REVIEW" | "PAID" | "PARTIALLY_PAID" | "FAILED" | "REJECTED" | "REFUNDED" | "WAIVED";
export type EnrollmentStatus = "ENROLLED" | "CANCELLED" | "WAITLISTED" | "REMOVED";
export type WaitlistStatus = "WAITING" | "PROMOTED" | "ACCEPTED" | "DECLINED" | "EXPIRED" | "REMOVED" | "CANCELLED";
export type ScanMode = "ONSITE_VERIFICATION" | "CONFERENCE_CHECK_IN" | "CONFERENCE_CHECK_OUT" | "PLENARY_ENTRY" | "PLENARY_EXIT" | "CONCURRENT_ENTRY" | "CONCURRENT_EXIT" | "RE_ENTRY" | "SPECIAL_EVENT_ENTRY" | "MANUAL_LOOKUP";

export type ConferenceSummary = {
  title: string;
  theme: string;
  startDate: string;
  endDate: string;
  venue: string;
  timezone: string;
};

export type QrPayload = {
  token: string;
  version: number;
};
