import { PaymentMethodEnum } from "@/constants/booking"

import type { RoomState } from "@/types/stores/enter-details"

export function isPaymentMethodEnum(value: string): value is PaymentMethodEnum {
  return Object.values<string>(PaymentMethodEnum).includes(value)
}

export function hasFlexibleRate({ room }: RoomState): boolean {
  return room.isFlexRate
}

export function hasPrepaidRate({ room }: RoomState): boolean {
  return !room.isFlexRate
}

export function calculateTotalRoomPrice(
  { room }: RoomState,
  initialRoomPrice?: number
) {
  let totalPrice = initialRoomPrice ?? room.roomPrice.perStay.local.price

  if (room.breakfast) {
    totalPrice += Number(room.breakfast.localPrice.totalPrice) * room.adults
  }

  if (room.roomFeatures) {
    room.roomFeatures.forEach((pkg) => {
      totalPrice += Number(pkg.localPrice.price)
    })
  }

  let comparisonPrice = totalPrice

  const isMember = room.guest.join || room.guest.membershipNo
  if (isMember && "member" in room.roomRate) {
    const publicPrice = room.roomRate.public?.localPrice.pricePerStay ?? 0
    const memberPrice = room.roomRate.member?.localPrice.pricePerStay ?? 0
    const diff = publicPrice - memberPrice
    comparisonPrice = totalPrice + diff
  }

  return {
    totalPrice,
    comparisonPrice,
  }
}
