export type Role =
  | "CUSTOMER"
  | "OWNER"
  | "ADMIN"
  | "SUPER_ADMIN"
  | "FINANCE_ADMIN"
  | "OPERATIONS_ADMIN"
  | "VIEWER";

export type UserStatus = "PENDING_EMAIL_VERIFICATION" | "ACTIVE" | "SUSPENDED";

export type PropertyStatus = "DRAFT" | "PUBLISHED" | "PAUSED" | "REJECTED";

export type BookingStatus =
  | "PENDING_PAYMENT"
  | "WAITING_OWNER"
  | "CONFIRMED"
  | "REJECTED"
  | "EXPIRED"
  | "CANCELLED"
  | "COMPLETED";

export type PaymentStatus =
  | "PENDING"
  | "PAID"
  | "FAILED"
  | "REFUNDED"
  | "PARTIALLY_REFUNDED"
  | "CANCELLED";

export type PaymentProvider = "PLACEHOLDER" | "MANUAL" | "DEMO" | "MOAMLET" | "WALLET";

export type WalletTxnType =
  | "TOPUP"
  | "ADMIN_ADJUST"
  | "BOOKING_PAY"
  | "REFUND"
  | "POINTS_REDEEM";

export type TopUpStatus = "PENDING" | "APPROVED" | "REJECTED";

export type LoyaltyTxnType = "EARN" | "REDEEM" | "ADJUST";

export type CouponType = "PERCENT" | "FIXED_TND";

export const ROLES = [
  "CUSTOMER",
  "OWNER",
  "ADMIN",
  "SUPER_ADMIN",
  "FINANCE_ADMIN",
  "OPERATIONS_ADMIN",
  "VIEWER",
] as const;
export const STAFF_ROLE_VALUES = [
  "SUPER_ADMIN",
  "FINANCE_ADMIN",
  "OPERATIONS_ADMIN",
  "VIEWER",
] as const;
export const USER_STATUSES = ["PENDING_EMAIL_VERIFICATION", "ACTIVE", "SUSPENDED"] as const;
export const PROPERTY_STATUSES = ["DRAFT", "PUBLISHED", "PAUSED", "REJECTED"] as const;
export const BOOKING_STATUSES = [
  "PENDING_PAYMENT",
  "WAITING_OWNER",
  "CONFIRMED",
  "REJECTED",
  "EXPIRED",
  "CANCELLED",
  "COMPLETED",
] as const;
export const PAYMENT_STATUSES = [
  "PENDING",
  "PAID",
  "FAILED",
  "REFUNDED",
  "PARTIALLY_REFUNDED",
  "CANCELLED",
] as const;
export const PAYMENT_PROVIDERS = ["PLACEHOLDER", "MANUAL", "DEMO", "MOAMLET", "WALLET"] as const;
export const WALLET_TXN_TYPES = [
  "TOPUP",
  "ADMIN_ADJUST",
  "BOOKING_PAY",
  "REFUND",
  "POINTS_REDEEM",
] as const;
export const TOPUP_STATUSES = ["PENDING", "APPROVED", "REJECTED"] as const;
export const WITHDRAWAL_STATUSES = ["PENDING", "APPROVED", "REJECTED"] as const;
export const LOYALTY_TXN_TYPES = ["EARN", "REDEEM", "ADJUST"] as const;
export const COUPON_TYPES = ["PERCENT", "FIXED_TND"] as const;

export const REFUND_TYPES = ["FULL", "PARTIAL"] as const;
export const REFUND_REASON_CODES = [
  "GUEST_CANCEL",
  "HOST_CANCEL",
  "PROPERTY_ISSUE",
  "PAYMENT_ERROR",
  "ADMIN_ADJUSTMENT",
  "OTHER",
] as const;
export const LEDGER_ENTRY_TYPES = ["BOOKING_PAYMENT", "REFUND", "WITHDRAWAL"] as const;
export const LEDGER_DIRECTIONS = ["IN", "OUT"] as const;
export const LEDGER_PARTY_ROLES = ["CUSTOMER", "OWNER", "PLATFORM"] as const;
export const LEDGER_STATUSES = ["POSTED", "VOID"] as const;

export type RefundType = (typeof REFUND_TYPES)[number];
export type RefundReasonCode = (typeof REFUND_REASON_CODES)[number];
export type LedgerEntryType = (typeof LEDGER_ENTRY_TYPES)[number];
export type LedgerDirection = (typeof LEDGER_DIRECTIONS)[number];
export type LedgerPartyRole = (typeof LEDGER_PARTY_ROLES)[number];
export type LedgerStatus = (typeof LEDGER_STATUSES)[number];
