/**
 * This file was generated by kysely-codegen.
 * Please do not edit it manually.
 */

import type { ColumnType } from "kysely";

export type BookingStatus = "CHECKED_IN" | "CHECKED_OUT" | "ENDED" | "FAILED" | "HOLD" | "SELF_CANCELLED" | "SYSTEM_CANCELLED" | "SYSTEM_FAULT" | "SYSTEM_PROCESSING" | "UPCOMING";

export type Generated<T> = T extends ColumnType<infer S, infer I, infer U>
  ? ColumnType<S, I | undefined, U>
  : ColumnType<T, T | undefined, T>;

export type Int8 = ColumnType<string, bigint | number | string, bigint | number | string>;

export type Json = JsonValue;

export type JsonArray = JsonValue[];

export interface JsonObject {
  [x: string]: JsonValue | undefined;
}

export type JsonPrimitive = boolean | number | string | null;

export type JsonValue = JsonArray | JsonObject | JsonPrimitive;

export type Numeric = ColumnType<string, number | string, number | string>;

export type PaymentStatus = "CANCELLED" | "COMPLETED" | "FAILED" | "PENDING" | "REFUNDED";

export type RciInventoryType = "EXCHANGE" | "RENTAL";

export type Timestamp = ColumnType<Date, Date | string, Date | string>;

export interface ApiTokens {
  created_at: Generated<Timestamp>;
  expires_at: Timestamp | null;
  hash_alg: string;
  id: Generated<Int8>;
  metadata: Generated<Json>;
  name: string;
  prefix: string;
  public_id: string;
  scopes: Generated<string[]>;
  secret_hash: Buffer;
  updated_at: Timestamp | null;
  user_id: Int8 | null;
}

export interface BookingDestinations {
  additional_data: Generated<Json>;
  code: string;
  created_at: Generated<Timestamp>;
  id: Generated<Int8>;
  name: string;
  updated_at: Timestamp | null;
}

export interface BookingExternalSourceRefs {
  additional_data: Generated<Json>;
  created_at: Generated<Timestamp>;
  id: Generated<Int8>;
  note: string | null;
  ref_id: string;
  source_name: string;
  updated_at: Timestamp | null;
}

export interface BookingItineraries {
  additional_data: Generated<Json>;
  available_from: Timestamp;
  available_to: Timestamp;
  booking_destination_id: Int8;
  created_at: Generated<Timestamp>;
  id: Generated<Int8>;
  name: string;
  updated_at: Timestamp | null;
}

export interface BookingRequests {
  comment: string | null;
  content_id: string | null;
  created_at: Generated<Timestamp>;
  email: string | null;
  ext_booking_id: string | null;
  first_name: string | null;
  guest_count: Generated<number | null>;
  id: Generated<Int8>;
  last_name: string | null;
  member_id: Generated<Int8>;
  mobile: string | null;
  note: string | null;
  status: string;
  type: string;
  updated_at: Timestamp | null;
}

export interface Bookings {
  _is_deleted: Generated<boolean | null>;
  additional_data: Generated<Json>;
  created_at: Generated<Timestamp>;
  entity_id: Int8;
  entity_type: string;
  id: Generated<Int8>;
  is_managed_booking: Generated<boolean>;
  member_id: Int8;
  note: string | null;
  updated_at: Timestamp | null;
}

export interface BookingUnitCharges {
  additional_data: Generated<Json>;
  booking_unit_id: Int8;
  created_at: Generated<Timestamp>;
  currency: string | null;
  id: Generated<Int8>;
  name: string;
  note: string | null;
  type: string;
  updated_at: Timestamp | null;
  value: Numeric;
}

export interface BookingUnitGuests {
  additional_data: Generated<Json>;
  booking_unit_id: Int8;
  created_at: Generated<Timestamp>;
  id: Generated<Int8>;
  is_primary_guest: Generated<boolean>;
  member_number: string;
  note: string | null;
  type: string;
  updated_at: Timestamp | null;
}

export interface BookingUnits {
  additional_data: Generated<Json>;
  adults: number;
  booking_ext_ref_id: Int8 | null;
  booking_id: Int8;
  check_in_date: Timestamp;
  check_out_date: Timestamp;
  children: Generated<number>;
  complete_source: string | null;
  completed_at: Timestamp | null;
  created_at: Generated<Timestamp>;
  hold_end: Timestamp | null;
  hold_expiration: Timestamp | null;
  hold_source: string;
  hold_start: Generated<Timestamp>;
  id: Generated<Int8>;
  infants: Generated<number>;
  note: string | null;
  status: BookingStatus;
  unit_code: string;
  unit_name: string | null;
  updated_at: Timestamp | null;
  viewpoint_booking_number: string | null;
}

export interface DestinationItineraries {
  _is_active: Generated<boolean | null>;
  _is_deleted: Generated<boolean | null>;
  available_from: Timestamp;
  available_to: Timestamp;
  comment: string | null;
  content_id: string;
  created_at: Generated<Timestamp>;
  destination_id: Int8;
  id: Generated<Int8>;
  max_bookable_units: number | null;
  updated_at: Timestamp | null;
}

export interface Destinations {
  _is_active: Generated<boolean | null>;
  _is_deleted: Generated<boolean | null>;
  code: string;
  content_id: string;
  created_at: Generated<Timestamp>;
  id: Generated<Int8>;
  note: string | null;
  updated_at: Timestamp | null;
}

export interface MemberAccessRolePolicies {
  city_stopovers: Generated<string>;
  created_at: Generated<Timestamp>;
  curated_events: Generated<string>;
  hot_deals: Generated<string>;
  id: Generated<Int8>;
  internal_properties: Generated<string>;
  karma_alliance: Generated<string>;
  karma_alliance_offers: Generated<string>;
  karma_getaway: Generated<string>;
  karma_getaway_offers: Generated<string>;
  karma_nomad: Generated<string>;
  karma_registry_collection: Generated<string>;
  login: boolean;
  member_privileges_travel: Generated<string>;
  pid: Generated<string | null>;
  profile: Generated<string>;
  rci_exchange: Generated<string>;
  rci_rental: Generated<string>;
  reciprocal_partners: Generated<string>;
  restrictions: Json | null;
  twoforone: Generated<string>;
  updated_at: Timestamp | null;
}

// Spliced in by hand rather than regenerated — see the note at the top of this
// file. Console-side record of every account retired through the console.
export interface AccountDeletionRecords {
  account_name: string | null;
  account_number: string;
  created_at: Generated<Timestamp>;
  ext_account_status_id: string | null;
  followup_due_at: Timestamp;
  followup_edm_at: Timestamp | null;
  followup_edm_error: string | null;
  followup_edm_status: Generated<string>;
  id: Generated<string>;
  kill_login: Generated<boolean>;
  local_error: string | null;
  members_updated: Generated<number>;
  notice_edm_at: Timestamp | null;
  notice_edm_error: string | null;
  notice_edm_status: Generated<string>;
  notice_template_id: string | null;
  followup_template_id: string | null;
  region: string | null;
  viewpoint_log_status: string | null;
  viewpoint_log_error: string | null;
  followup_days: number | null;
  performed_by: string | null;
  performed_by_id: string | null;
  previous_status: string | null;
  previous_status_id: number | null;
  reactivated_at: Timestamp | null;
  reactivated_by: string | null;
  reactivated_to_status: string | null;
  reason: string;
  recipients: Generated<Json>;
  revoke_sessions: Generated<boolean>;
  sessions_revoked: Generated<number>;
  soft_delete: Generated<boolean>;
  status_id: string;
  status_name: string;
  updated_at: Timestamp | null;
  users_updated: Generated<number>;
}

export interface MemberAccountStatuses {
  created_at: Generated<Timestamp>;
  ext_account_status_id: string | null;
  id: Generated<Int8>;
  is_active: Generated<boolean>;
  name: string;
  pid: Generated<string | null>;
  updated_at: Timestamp | null;
}

export interface MemberAccountTypes {
  created_at: Generated<Timestamp>;
  ext_account_type_id: string | null;
  id: Generated<Int8>;
  is_active: Generated<boolean>;
  name: string;
  pid: Generated<string | null>;
  updated_at: Timestamp | null;
}

export interface MemberAffinities {
  created_at: Generated<Timestamp>;
  entity_id: string;
  entity_type: string;
  id: Generated<Int8>;
  pid: Generated<string | null>;
  preference_type: string;
  updated_at: Timestamp | null;
  user_id: Generated<Int8>;
}

export interface MemberPreferences {
  created_at: Generated<Timestamp>;
  enable_advertisement_notifications: Generated<boolean>;
  enable_notifications: Generated<boolean>;
  enable_personal_notifications: Generated<boolean>;
  id: Generated<Int8>;
  member_id: Int8;
  personal_interests: Generated<string[]>;
  updated_at: Timestamp | null;
}

export interface MemberProfiles {
  _is_active: Generated<boolean | null>;
  _is_deleted: Generated<boolean | null>;
  _is_family: boolean;
  _is_owner: boolean;
  address_line_one: string | null;
  address_line_two: string | null;
  avatar: string | null;
  city: string | null;
  country: string | null;
  cover: string | null;
  created_at: Generated<Timestamp>;
  date_of_anniversary: Timestamp | null;
  date_of_birth: Timestamp | null;
  first_name: string | null;
  id: Generated<Int8>;
  last_name: string | null;
  member_id: Int8;
  mobile: string | null;
  nationality: string | null;
  postcode: string | null;
  relationship: string | null;
  social_accounts: Json | null;
  state: string | null;
  updated_at: Timestamp | null;
}

export interface Members {
  _is_active: Generated<boolean | null>;
  // Present in the member DB; spliced in rather than regenerating this file.
  signup_promo_code: string | null;
  _is_deleted: Generated<boolean | null>;
  created_at: Generated<Timestamp>;
  id: Generated<Int8>;
  member_number: string;
  membership_number: string;
  membership_status_id: Int8;
  membership_type_id: Int8;
  updated_at: Timestamp | null;
  user_id: Int8;
}

export interface MemberSavedSearches {
  created_at: Generated<Timestamp>;
  frequency: Generated<number | null>;
  id: Generated<Int8>;
  label: string;
  last_used: Timestamp | null;
  member_id: Int8;
  parameters: Generated<Json | null>;
  search_term: string | null;
  source: string;
  updated_at: Timestamp | null;
}

export interface MembershipAccountTypeClubs {
  created_at: Generated<Timestamp>;
  id: Generated<string>;
  membership_account_type_id: Int8;
  membership_club_id: string;
  updated_at: Timestamp | null;
}

export interface MembershipAccountTypeStatusPolicies {
  created_at: Generated<Timestamp>;
  id: Generated<string>;
  member_access_role_policy_id: Int8;
  member_account_status_id: Int8;
  membership_account_type_id: Int8;
  updated_at: Timestamp | null;
}

export interface MembershipClubChargeCenters {
  created_at: Generated<Timestamp>;
  currency: string;
  id: Generated<string>;
  name: string;
  note: string | null;
  updated_at: Timestamp | null;
  viewpoint_charge_center_id: string;
}

export interface MembershipClubs {
  club_id: string;
  created_at: Generated<Timestamp>;
  id: Generated<string>;
  name: string;
  note: string | null;
  updated_at: Timestamp | null;
}

export interface MembershipClubStatusPolicies {
  created_at: Generated<Timestamp>;
  id: Generated<string>;
  member_access_role_policy_id: Int8;
  member_account_status_id: Int8;
  membership_club_id: string;
  updated_at: Timestamp | null;
}

export interface Notifications {
  _is_deleted: Generated<boolean>;
  _status: string;
  _v: Generated<number | null>;
  additional: Json | null;
  body: string | null;
  created_at: Generated<Timestamp>;
  id: Generated<Int8>;
  image: string | null;
  kind: string;
  name: string | null;
  pid: Generated<string | null>;
  title: string;
  updated_at: Timestamp | null;
  user_id: Generated<Int8>;
}

export interface OauthAccounts {
  _is_active: Generated<boolean>;
  _is_deleted: Generated<boolean>;
  created_at: Generated<Timestamp>;
  id: Generated<Int8>;
  issuer: string;
  pid: Generated<string | null>;
  scope: string;
  sub: string;
  updated_at: Timestamp | null;
  user_id: Generated<Int8>;
}

export interface PaymentTransactions {
  additional_data: Generated<Json>;
  created_at: Generated<Timestamp>;
  currency: string;
  gateway: string;
  id: Generated<Int8>;
  method: string | null;
  note: string | null;
  ref_id: string | null;
  source_id: Int8;
  source_type: string;
  status: Generated<PaymentStatus>;
  total_amount: Numeric;
  updated_at: Timestamp | null;
  user_id: Int8;
}

export interface RciAreas {
  accommodation_expectations: string | null;
  additional_information: string | null;
  attractions: string | null;
  climate: string | null;
  code: string;
  created_at: Generated<Timestamp>;
  id: Generated<Int8>;
  major_airport_transportation: string | null;
  name: string;
  notes: string | null;
  overview: string | null;
  status: string | null;
  updated_at: Timestamp | null;
}

export interface RciAssets {
  alt_text: string | null;
  created_at: Generated<Timestamp>;
  id: Generated<Int8>;
  name: string;
  size: Generated<string>;
  type: string;
  updated_at: Timestamp | null;
}

export interface RciResortAccessibilityFeatures {
  created_at: Generated<Timestamp>;
  features: string[] | null;
  has_braile_or_raised_signage: Generated<boolean | null>;
  has_deaf_equipments: Generated<boolean | null>;
  has_elevator: Generated<boolean | null>;
  id: Generated<Int8>;
  resort_id: Int8;
  updated_at: Timestamp | null;
}

export interface RciResortActivites {
  created_at: Generated<Timestamp>;
  details: Json | null;
  distance_kms: Numeric | null;
  distance_miles: Numeric | null;
  group_type: string | null;
  id: Generated<Int8>;
  name: string;
  proximity: string | null;
  resort_id: Int8;
  updated_at: Timestamp | null;
}

export interface RciResortAddresses {
  city: string | null;
  country: string | null;
  created_at: Generated<Timestamp>;
  destination: string | null;
  id: Generated<Int8>;
  island: string | null;
  line_four: string | null;
  line_one: string | null;
  line_three: string | null;
  line_two: string | null;
  postcode: string | null;
  province: string | null;
  region_level_one: string | null;
  region_level_three: string | null;
  region_level_two: string | null;
  resort_id: Int8;
  search_vector: Generated<string | null>;
  state: string | null;
  type: string | null;
  updated_at: Timestamp | null;
}

export interface RciResortAirportsInformation {
  code: string | null;
  created_at: Generated<Timestamp>;
  distance_kms: Numeric | null;
  distance_miles: Numeric | null;
  id: Generated<Int8>;
  name: string;
  resort_id: Int8;
  type: string | null;
  updated_at: Timestamp | null;
}

export interface RciResortAmenities {
  created_at: Generated<Timestamp>;
  details: string[] | null;
  distance_kms: Numeric | null;
  distance_miles: Numeric | null;
  group_type: string | null;
  id: Generated<Int8>;
  name: string;
  proximity: string | null;
  resort_id: Int8;
  updated_at: Timestamp | null;
}

export interface RciResortAssets {
  asset_id: Int8;
  created_at: Generated<Timestamp>;
  id: Generated<Int8>;
  resort_id: Int8;
  updated_at: Timestamp | null;
}

export interface RciResortCheckinCheckoutRules {
  after_hours_instructions: string | null;
  check_in_instructions: string | null;
  check_in_location: string | null;
  check_in_time: string | null;
  check_out_time: string | null;
  created_at: Generated<Timestamp>;
  front_desk_end_time: string | null;
  front_desk_start_time: string | null;
  has_24hr_front_desk: Generated<boolean | null>;
  has_express_check_in_check_out: Generated<boolean | null>;
  has_onsite_front_desk: Generated<boolean | null>;
  id: Generated<Int8>;
  points_check_in_days: string[] | null;
  resort_id: Int8;
  updated_at: Timestamp | null;
  weeks_check_in_days: string[] | null;
}

export interface RciResortContacts {
  created_at: Generated<Timestamp>;
  id: Generated<Int8>;
  resort_id: Int8;
  type: string;
  updated_at: Timestamp | null;
  value: string;
}

export interface RciResortDining {
  created_at: Generated<Timestamp>;
  distance_kms: Numeric | null;
  distance_miles: Numeric | null;
  has_banquet_facilities: Generated<boolean | null>;
  has_barbeque_area: Generated<boolean | null>;
  has_breakfast: Generated<boolean | null>;
  has_cafe: Generated<boolean | null>;
  has_event_catering: Generated<boolean | null>;
  has_room_service: Generated<boolean | null>;
  has_snack_bar: Generated<boolean | null>;
  id: Generated<Int8>;
  proximity: string | null;
  resort_id: Int8;
  type: string | null;
  updated_at: Timestamp | null;
}

export interface RciResortFeatures {
  air_conditioned_public_areas: Generated<boolean | null>;
  created_at: Generated<Timestamp>;
  electric_service: string | null;
  floor_count: string | null;
  id: Generated<Int8>;
  resort_id: Int8;
  resort_map_source: string | null;
  security_features: string[] | null;
  strata_code: string | null;
  strata_description: string | null;
  updated_at: Timestamp | null;
}

export interface RciResortFees {
  created_at: Generated<Timestamp>;
  house_keeping_fees: Generated<Json>;
  id: Generated<Int8>;
  inclusive_fees: Generated<Json>;
  mandatory_fees: Generated<Json>;
  resort_fees: Generated<Json>;
  resort_id: Int8;
  updated_at: Timestamp | null;
}

export interface RciResortHighlights {
  created_at: Generated<Timestamp>;
  destination_highlights: string | null;
  headline: string | null;
  id: Generated<Int8>;
  non_member_highlights: string | null;
  resort_highlights: string | null;
  resort_id: Int8;
  unit_highlights: string | null;
  updated_at: Timestamp | null;
}

export interface RciResortHolidayHorizons {
  area_attractions: string | null;
  check_in_check_out: string | null;
  climate: string | null;
  created_at: Generated<Timestamp>;
  further_information: string | null;
  id: Generated<Int8>;
  introduction: string | null;
  major_airports_transportation: string | null;
  resort_id: Int8;
  special_notes_precautions: string | null;
  updated_at: Timestamp | null;
}

export interface RciResortLocations {
  airport_directions: string | null;
  created_at: Generated<Timestamp>;
  elevation_feet: Numeric | null;
  elevation_mtrs: Numeric | null;
  id: Generated<Int8>;
  latitude: Numeric | null;
  longitude: Numeric | null;
  major_city_distance_kms: Numeric | null;
  major_city_distance_miles: Numeric | null;
  nearest_town_distance_kms: Numeric | null;
  nearest_town_distance_miles: Numeric | null;
  resort_id: Int8;
  seasonal_accessibility: string | null;
  updated_at: Timestamp | null;
}

export interface RciResortPropertyInformation {
  additional_message: string | null;
  created_at: Generated<Timestamp>;
  end_date: string | null;
  general_urgent_messages: string[] | null;
  id: Generated<Int8>;
  message: string | null;
  non_member_urgent_message: string[] | null;
  resort_id: Int8;
  start_date: string | null;
  type: string;
  updated_at: Timestamp | null;
}

export interface RciResortRestrictions {
  created_at: Generated<Timestamp>;
  details: Generated<Json>;
  id: Generated<Int8>;
  is_adult_only: Generated<boolean | null>;
  pets_allowed: Generated<boolean | null>;
  resort_id: Int8;
  updated_at: Timestamp | null;
}

export interface RciResortReviews {
  average_rating: Numeric | null;
  created_at: Generated<Timestamp>;
  id: Generated<Int8>;
  resort_id: Int8;
  updated_at: Timestamp | null;
}

export interface RciResorts {
  created_at: Generated<Timestamp>;
  id: Generated<Int8>;
  last_renovated_at: string | null;
  name: string;
  rci_resort_id: string;
  slug: string;
  updated_at: Timestamp | null;
  viewpoint_resort_id: string | null;
}

export interface RciResortTransports {
  airport_shuttle_service: Generated<boolean | null>;
  attraction_area_shuttle_service: string | null;
  created_at: Generated<Timestamp>;
  id: Generated<Int8>;
  parking_available: string[] | null;
  resort_id: Int8;
  updated_at: Timestamp | null;
}

export interface RciResortUnitAmenities {
  created_at: Generated<Timestamp>;
  details: string[] | null;
  id: Generated<Int8>;
  name: string;
  unit_id: Int8;
  updated_at: Timestamp | null;
}

export interface RciResortUnitInventory {
  check_in: Timestamp;
  check_out: Timestamp;
  cost: Generated<Numeric>;
  count: Generated<number>;
  created_at: Generated<Timestamp>;
  currency: string;
  guest_certificate_fee: Generated<Numeric>;
  id: Generated<Int8>;
  inventory_type: RciInventoryType;
  last_sync_at: Timestamp | null;
  next_sync_at: Generated<Timestamp>;
  points: Generated<number>;
  unit_id: Int8;
  updated_at: Timestamp | null;
}

export interface RciResortUnitKitchenInformation {
  created_at: Generated<Timestamp>;
  details: string[] | null;
  id: Generated<Int8>;
  name: string;
  type: string;
  unit_id: Int8;
  updated_at: Timestamp | null;
}

export interface RciResortUnits {
  accessibility: string | null;
  baby_facilities: string[] | null;
  bathroom: string | null;
  bathroom_accessible: string | null;
  bathroom_description: string | null;
  bedroom_bath_location: string | null;
  bedroom_type: string;
  configuration: string | null;
  cooling_systems: string[] | null;
  created_at: Generated<Timestamp>;
  floor_plan: string | null;
  floorings: string[] | null;
  has_non_smoking_rooms: Generated<boolean | null>;
  has_outdoor_living_space_with_funiture: Generated<boolean | null>;
  has_rollin_shower: Generated<boolean | null>;
  has_telephone: Generated<boolean | null>;
  house_keeping: string | null;
  id: Generated<Int8>;
  is_loft: Generated<boolean | null>;
  max_occupancy: Generated<number | null>;
  outdoor_living_spaces: string[] | null;
  private_occupancy: Generated<number | null>;
  resort_id: Int8;
  safe_box: Generated<boolean | null>;
  safety_equipment: Generated<boolean | null>;
  size: Numeric | null;
  sleeping_arrangements: string[] | null;
  square_footage: Numeric | null;
  updated_at: Timestamp | null;
}

export interface SchemaMigrations {
  dirty: boolean;
  version: Int8;
}

export interface Sessions {
  application_type: string;
  application_version: string;
  browser: string;
  created_at: Generated<Timestamp>;
  device_type: string;
  fcm_token: string;
  id: Generated<Int8>;
  ip_address: string;
  location: string;
  os: string;
  pid: Generated<string | null>;
  refresh_token: string;
  updated_at: Timestamp | null;
  user_id: Generated<Int8>;
}

export interface Users {
  _is_active: Generated<boolean>;
  _is_deleted: Generated<boolean>;
  created_at: Generated<Timestamp>;
  email: string;
  hashed_password: string | null;
  id: Generated<Int8>;
  pid: Generated<string | null>;
  updated_at: Timestamp | null;
}

export interface AdminConsoleUsers {
  _is_active: Generated<boolean>;
  _is_deleted: Generated<boolean>;
  created_at: Generated<Timestamp>;
  email: string;
  hashed_password: string;
  id: Generated<Int8>;
  pid: Generated<string | null>;
  updated_at: Timestamp | null;
}

export interface VerificationTokens {
  created_at: Generated<Timestamp>;
  expires: string;
  id: Generated<Int8>;
  kind: string;
  pid: Generated<string | null>;
  token: string;
  updated_at: Timestamp | null;
  user_id: Generated<Int8>;
}

export interface BlockedEmails {
  id: Generated<string>;
  email: string;
  is_active: Generated<boolean>;
  updated_by: string | null;
  created_at: Generated<Timestamp>;
  updated_at: Generated<Timestamp>;
}

export interface DefaultEmails {
  id: Generated<string>;
  email: string;
  is_active: Generated<boolean>;
  updated_by: string | null;
  created_at: Generated<Timestamp>;
  updated_at: Generated<Timestamp>;
}

export interface Campaigns {
  id: Generated<string>;
  name: string;
  title: string;
  body: string;
  image_url: string | null;
  status: string;
  scheduled_at: Timestamp | null;
  target_criteria: Generated<Json>;
  additional_data: Generated<Json>;
  campaignID: string | null;
  sent_count: Generated<number>;
  total_count: Generated<number>;
  impression_count: Generated<number>;
  click_count: Generated<number>;
  open_count: Generated<number>;
  published_by: string | null;
  created_at: Generated<Timestamp>;
  updated_at: Timestamp | null;
}

export interface ConsoleUserMemberAccessRoles {
  id: Generated<string>;
  console_user_id: string;
  member_access_role_id: string;
  assigned_by: string | null;
  created_at: Generated<Timestamp>;
}

export interface MemberAccessRoles {
  id: Generated<string>;
  name: string;
  description: string | null;
  can_view_analytics: Generated<boolean>;
  can_view_bookings: Generated<boolean>;
  can_view_sessions: Generated<boolean>;
  can_view_activity_logs: Generated<boolean>;
  can_view_saved_searches: Generated<boolean>;
  can_view_points: Generated<boolean>;
  can_reset_password: Generated<boolean>;
  can_sync_profile: Generated<boolean>;
  account_type_ids: Generated<string[]>;
  account_status_ids: Generated<string[]>;
  created_by: string | null;
  created_at: Generated<Timestamp>;
  updated_at: Timestamp | null;
}

export interface ConsoleUserMemberAccess {
  id: Generated<string>;
  console_user_id: string;
  /** Role this grant was last applied from, if any. */
  applied_role_id: string | null;
  can_view_analytics: Generated<boolean>;
  can_view_bookings: Generated<boolean>;
  can_view_sessions: Generated<boolean>;
  can_view_activity_logs: Generated<boolean>;
  can_view_saved_searches: Generated<boolean>;
  can_view_points: Generated<boolean>;
  can_reset_password: Generated<boolean>;
  can_sync_profile: Generated<boolean>;
  /** Empty array means no restriction. */
  account_type_ids: Generated<string[]>;
  account_status_ids: Generated<string[]>;
  created_at: Generated<Timestamp>;
  updated_at: Timestamp | null;
}

export interface ConsoleFeatures {
  created_at: Generated<Timestamp>;
  id: Generated<string>;
  is_active: Generated<boolean>;
  name: string;
  slug: string;
  updated_at: Timestamp | null;
}

export interface ConsoleRolePrivileges {
  console_feature_id: string;
  console_role_id: string;
  create: Generated<boolean>;
  created_at: Generated<Timestamp>;
  delete: Generated<boolean>;
  id: Generated<string>;
  is_active: Generated<boolean>;
  read: Generated<boolean>;
  update: Generated<boolean>;
  updated_at: Timestamp | null;
}

export interface ConsoleRoles {
  created_at: Generated<Timestamp>;
  description: string | null;
  id: Generated<string>;
  name: string;
  updated_at: Timestamp | null;
}

export interface ConsoleUserRoles {
  console_role_id: string;
  console_user_id: string;
  created_at: Generated<Timestamp>;
  id: Generated<string>;
  updated_at: Timestamp | null;
}

export interface ConsoleUsers {
  /** Profile fields — see 20260829000000_add_console_user_profile_fields. */
  avatar_url: string | null;
  phone: string | null;
  job_title: string | null;
  last_login_at: Timestamp | null;
  service_center: string | null;
  viewpoint_member_no: string | null;
  viewpoint_account_id: string | null;
  viewpoint_contact_id: string | null;
  viewpoint_club: string | null;
  viewpoint_is_active: boolean | null;
  viewpoint_mapped_by: string | null;

  id: Generated<string>;
  first_name: string;
  last_name: string | null;
  email: string;
  username: string;
  hashed_password: string | null;
  password_salt: string | null;
  password_iterations: number | null;
  password_hash_algo: string | null;
  login_attempts: Generated<number>;
  login_lock_release_at: Timestamp | null;
  is_active: Generated<boolean>;
  is_deleted: Generated<boolean>;
  is_super_admin: Generated<boolean>;
  created_at: Generated<Timestamp>;
  updated_at: Timestamp | null;
}

export interface ConsoleUserPromoCodeAccess {
  id: Generated<string>;
  console_user_id: string;
  promo_code_id: string;
  created_at: Generated<Timestamp>;
}

export interface ConsoleUserCampaignAccess {
  id: Generated<string>;
  console_user_id: string;
  campaign_id: string;
  created_at: Generated<Timestamp>;
}

export interface ConsoleUserAccessListMembers {
  id: Generated<string>;
  console_user_id: string;
  added_by: string | null;
  created_at: Generated<Timestamp>;
  can_export_campaigns: Generated<boolean>;
  can_export_promo_codes: Generated<boolean>;
  can_export_member_referrals: Generated<boolean>;
  can_export_reports: Generated<boolean>;
}

export interface ConsoleUserSessions {
  id: Generated<string>;
  console_user_id: string;
  fcm_token: string;
  ip_address: string;
  device_type: string;
  os: string;
  browser: string;
  refresh_token: string;
  location: string;
  created_at: Generated<Timestamp>;
  updated_at: Timestamp | null;
}

export interface HoldingAccountBalances {
  account_no: string;
  region: string;
  balance: Generated<number>;
  last_synced_at: Generated<Timestamp>;
}

export interface Dashboards {
  cover_image_path: string | null;
  created_at: Generated<Timestamp>;
  created_by: string;
  current_version_id: string | null;
  description: string | null;
  id: Generated<string>;
  name: string;
  slug: string;
  status: Generated<string>;
  updated_at: Generated<Timestamp>;
}

export interface DashboardVersions {
  created_at: Generated<Timestamp>;
  dashboard_id: string;
  entry_point: string;
  file_count: number;
  id: Generated<string>;
  manifest: Json | null;
  size_bytes: Int8;
  storage_prefix: string;
  uploaded_by: string;
  version_number: number;
}

export interface ConsoleUserDashboardAccess {
  console_user_id: string;
  created_at: Generated<Timestamp>;
  dashboard_id: string;
  granted_by: string;
  id: Generated<string>;
}

export interface DashboardPublicLinks {
  created_at: Generated<Timestamp>;
  created_by: string;
  dashboard_id: string;
  expires_at: Timestamp | null;
  id: Generated<string>;
  is_revoked: Generated<boolean>;
  password_hash: string | null;
  token_hash: string;
  view_count: Generated<number>;
}

export interface DashboardViewLog {
  console_user_id: string | null;
  dashboard_id: string;
  id: Generated<string>;
  ip_address: string | null;
  public_link_id: string | null;
  version_id: string | null;
  viewed_at: Generated<Timestamp>;
}

export interface DashboardAuditLog {
  action: string;
  actor_console_user_id: string | null;
  actor_email: string | null;
  created_at: Generated<Timestamp>;
  dashboard_id: string | null;
  id: Generated<string>;
  metadata: Json | null;
}


export interface EdmFolders {
  created_at: Generated<Timestamp>;
  created_by: string | null;
  id: Generated<string>;
  name: string;
  parent_id: string | null;
  sort_order: Generated<number>;
  updated_at: Generated<Timestamp>;
}

export interface EdmTemplates {
  active_version_id: string | null;
  created_at: Generated<Timestamp>;
  created_by: string | null;
  folder_id: string | null;
  // Not Generated: this is the SendGrid "d-<hex>" / our "k-<hex>" id, supplied
  // by the caller so existing references across the estate keep resolving.
  id: string;
  generation: Generated<string>;
  name: string;
  source: Generated<string>;
  updated_at: Generated<Timestamp>;
}

export interface EdmTemplateVersions {
  active: Generated<number>;
  asset_manifest: Json | null;
  created_at: Generated<Timestamp>;
  created_by: string | null;
  generate_plain_content: Generated<boolean>;
  html_sha256: string | null;
  id: Generated<string>;
  name: string;
  storage_path: string;
  subject: Generated<string>;
  template_id: string;
  version_number: number;
}


export interface DB {
  account_deletion_records: AccountDeletionRecords;
  edm_folders: EdmFolders;
  edm_templates: EdmTemplates;
  edm_template_versions: EdmTemplateVersions;
  holding_account_balances: HoldingAccountBalances;
  manager_point_transactions: ManagerPointTransactions;
  api_tokens: ApiTokens;
  blocked_emails: BlockedEmails;
  booking_destinations: BookingDestinations;
  booking_external_source_refs: BookingExternalSourceRefs;
  booking_itineraries: BookingItineraries;
  booking_requests: BookingRequests;
  campaigns: Campaigns;
  default_emails: DefaultEmails;
  booking_unit_charges: BookingUnitCharges;
  booking_unit_guests: BookingUnitGuests;
  booking_units: BookingUnits;
  bookings: Bookings;
  destination_itineraries: DestinationItineraries;
  destinations: Destinations;
  member_access_role_policies: MemberAccessRolePolicies;
  member_account_statuses: MemberAccountStatuses;
  member_account_types: MemberAccountTypes;
  member_affinities: MemberAffinities;
  member_preferences: MemberPreferences;
  member_profiles: MemberProfiles;
  member_saved_searches: MemberSavedSearches;
  members: Members;
  membership_account_type_clubs: MembershipAccountTypeClubs;
  membership_account_type_status_policies: MembershipAccountTypeStatusPolicies;
  membership_club_charge_centers: MembershipClubChargeCenters;
  membership_club_status_policies: MembershipClubStatusPolicies;
  membership_clubs: MembershipClubs;
  notifications: Notifications;
  oauth_accounts: OauthAccounts;
  payment_transactions: PaymentTransactions;
  rci_areas: RciAreas;
  rci_assets: RciAssets;
  rci_resort_accessibility_features: RciResortAccessibilityFeatures;
  rci_resort_activites: RciResortActivites;
  rci_resort_addresses: RciResortAddresses;
  rci_resort_airports_information: RciResortAirportsInformation;
  rci_resort_amenities: RciResortAmenities;
  rci_resort_assets: RciResortAssets;
  rci_resort_checkin_checkout_rules: RciResortCheckinCheckoutRules;
  rci_resort_contacts: RciResortContacts;
  rci_resort_dining: RciResortDining;
  rci_resort_features: RciResortFeatures;
  rci_resort_fees: RciResortFees;
  rci_resort_highlights: RciResortHighlights;
  rci_resort_holiday_horizons: RciResortHolidayHorizons;
  rci_resort_locations: RciResortLocations;
  rci_resort_property_information: RciResortPropertyInformation;
  rci_resort_restrictions: RciResortRestrictions;
  rci_resort_reviews: RciResortReviews;
  rci_resort_transports: RciResortTransports;
  rci_resort_unit_amenities: RciResortUnitAmenities;
  rci_resort_unit_inventory: RciResortUnitInventory;
  rci_resort_unit_kitchen_information: RciResortUnitKitchenInformation;
  rci_resort_units: RciResortUnits;
  rci_resorts: RciResorts;
  schema_migrations: SchemaMigrations;
  sessions: Sessions;
  users: Users;
  admin_console_users: AdminConsoleUsers;
  verification_tokens: VerificationTokens;
  console_features: ConsoleFeatures;
  console_user_member_access: ConsoleUserMemberAccess;
  member_access_roles: MemberAccessRoles;
  console_user_member_access_roles: ConsoleUserMemberAccessRoles;
  console_role_privileges: ConsoleRolePrivileges;
  console_roles: ConsoleRoles;
  console_user_roles: ConsoleUserRoles;
  console_users: ConsoleUsers;
  console_user_sessions: ConsoleUserSessions;
  console_user_promo_code_access: ConsoleUserPromoCodeAccess;
  console_user_campaign_access: ConsoleUserCampaignAccess;
  console_user_access_list_members: ConsoleUserAccessListMembers;
  point_transactions: PointTransactions;
  dashboards: Dashboards;
  dashboard_versions: DashboardVersions;
  console_user_dashboard_access: ConsoleUserDashboardAccess;
  dashboard_public_links: DashboardPublicLinks;
  dashboard_view_log: DashboardViewLog;
  dashboard_audit_log: DashboardAuditLog;
}

export interface PointTransactions {
  id: Generated<string>;
  source_holding_account: string;
  target_manager_id: string;
  points: number;
  initiator_id: string;
  notes: string | null;
  viewpoint_ref_id: string | null;
  status: string;
  created_at: Generated<Timestamp>;
  updated_at: Timestamp | null;
  application: Generated<string>;
}

export interface ManagerPointTransactions {
  id: Generated<string>;
  manager_id: string;
  target_contact_id: string;
  target_account_id: string;
  target_first_name: string | null;
  target_last_name: string | null;
  target_email: string | null;
  points: number;
  notes: string | null;
  viewpoint_ref_id: string | null;
  entitlement_id: string | null;
  status: string;
  created_at: Generated<Date>;
  updated_at: Generated<Date>;
  application: Generated<string>;
}
