export interface CRMData {
  DataID?: number;
  FieldID?: number;
  FieldName?: string;
  Value?: string | number;
  ValueName?: string;
}

export interface Member {
  AccountID: string;
  ContactID: number;
  Title: string | null;
  TitleID: number;
  FirstName: string;
  LastName: string;
  MailName: string;
  Salutation: string | null;
  Email: string;
  Phone: string | null;
  Fax: string | null;
  Mobile: string;
  AddressLine1: string;
  AddressLine2: string;
  AddressState: string;
  AddressCity: string;
  AddrCountry: string;
  Postcode: string;
  Nationality: string;
  DateOfBirth: string;
  IsPrimary: boolean;
  IsOwner: boolean;
  IsFamily: boolean;
  IsAuthority: boolean;
  Active: boolean;
  CreateDate: string | null;
  ModifyDate: string | null;
  CRMData: CRMData[] | null;
}

export interface Account {
  AccountID: string;
  AccountName: string;
  AccountType: string;
  AccountTypeID: number;
  ServiceCenter: string;
  ServiceCenterID: number;
  AccountStatus: string;
  AccountStatusID: number;
  DefaultChargeCenter: number;
  JoinedDate: string;
  ModifyDate: string;
  BillingAddressLine1: string;
  BillingAddressLine2: string;
  BillingAddressState: string;
  BillingAddressCity: string;
  BillingAddrCountry: string;
  BillingPostcode: string | null;
  Notes: string;
  Owners: Member[];
  Contacts: Member[];
  CRMData: Record<string, unknown> | null;
}

export interface MemberOpenLog {
  type:
    | "ALL"
    | "MISCELLANEOUS"
    | "MAINTENANCE"
    | "HOUSEKEEPING"
    | "VOUCHER"
    | "PROMOTION"
    | "SPECIALREQUEST"
    | "CHECKIN"
    | "INTERFACE"
    | "EXTRA"
    | "VPONLINE"
    | "MERGED"
    | "PAYMENT__PLAN"
    | "POINTS"
    | "PREALLOCATE"
    | "COMMUNICATION"
    | "AUDIT"
    | "MEMBER_PORTAL"
    | "REQUEST";
  status: "OPEN" | "CLOSED";
  comment: string;
  subject: string;
  sourceID: 95010;
  userLogType: 0;
  assignedTo: 95310 | 38994 | 38995;
  userDate: string;
  dueDate: string;
}

export interface DestinationUnit {
  UnitCategoryID: number;
  UnitCategory: string;
  UnitCategoryCode: string;
  Days: {
    Date: string;
    UnitCount: number;
    Rates: [];
  }[];
}

export interface Booking {
  ResortID: number;
  ResortCode: string;
  ResortName: string;
  ResortType: string;
  ResortAddress: {
    AddressLine1: string;
    AddressLine2: string;
    AddressLine3: string;
    AddressCity: string;
    AddrCountry: string;
    Postcode: string;
  };
  BookingNo: number;
  Status: string;
  Arrival: string;
  ActualArrival: string;
  Departure: string;
  ActualDeparture: string;
  GuestName: string;
  Adults: number;
  Children: number;
  Infants: number;
  Cots: number;
  HighChair: number;
  Room: number;
  RoomDescription: string;
  RoomType: string;
  RoomTypeCode: string;
  RoomCategory: string;
  RoomCategoryCode: string;
  AccountID: string;
  AccountType: string;
  BookingSource: string;
  BookingSourceCode: string;
  BookingComment: string;
  BookingType: string;
  BookingTypeID: number;
  ModifyDateTime: string;
  Owner: Member;
  PrimaryGuest: Member;
  Guests: Member[];
}
export type HOLD_TYPE = "TARIFF" | "OWNER__USE";

export interface ExternalMembership {
  EntityID: number;
  EntityName: string;
  EntityMemberID: string;
  CommenceDate: string;
  ExpirationDate: string;
}

export interface Contract {
  ContractID: number;
  AccountID: string;
  ExternalContractID: string;
  Quantity: number;
  InventoryType: string;
  UnitTypeID: number;
  UnitTypeDesc: string;
  UnitTypeAbbr: string;
  WeekTypeID: number;
  WeekTypeDesc: string;
  PurchaseDate: string;
  PaidDate: string;
  ExpiryDate: string;
  StatusID: number;
  ResortID: number;
  ResortName: string;
  ProductID: number;
  Term: number;
  TradeIn: string;
  InventoryClassID: number;
  ChargeCenterID: number;
  CommenceDate: string;
  ExchangeRate: number;
  ReportingChargeCenterID: number;
  CollectionsResortID: number;
  FinanceStatusID: number;
  FinanceCompanyID: number;
  FinanceNo: string;
  ApprovedDate: string;
  AccountManager: string;
  CRMData: {
    DataID: number;
    FieldID: number;
    FieldName: string;
    Value: null;
    ValueName: string;
  }[];
  ContactIDs: number[];
}
