"use client"
import { useIntl } from "react-intl"

import { formatPrice } from "@scandic-hotels/common/utils/numberFormatting"

import BoldRow from "../Bold"
import RegularRow from "../Regular"
import BedTypeRow from "./BedType"
import PackagesRow from "./Packages"

import type { CurrencyEnum } from "@scandic-hotels/common/constants/currency"

import type { SharedPriceRowProps } from "./price"

export interface RegularPriceType {
  regular?: {
    currency: CurrencyEnum
    pricePerNight: number
    pricePerStay: number
    regularPricePerStay: number
  }
}

interface RegularPriceProps extends SharedPriceRowProps {
  isMemberRate: boolean
  isCampaignRate?: boolean
  price: RegularPriceType["regular"]
}

export default function RegularPrice({
  bedType,
  isMemberRate,
  isCampaignRate,
  nights,
  packages,
  price,
}: RegularPriceProps) {
  const intl = useIntl()

  if (!price) {
    return null
  }

  const averagePriceTitle = intl.formatMessage({
    id: "priceDetails.averagePricePerNight",
    defaultMessage: "Average price per night",
  })

  const avgeragePricePerNight = formatPrice(
    intl,
    price.pricePerNight,
    price.currency
  )

  const roomCharge = formatPrice(intl, price.pricePerStay, price.currency)

  const regularPriceIsHigherThanPrice =
    price.regularPricePerStay > price.pricePerStay
  let regularCharge = undefined
  if (regularPriceIsHigherThanPrice) {
    regularCharge = formatPrice(intl, price.regularPricePerStay, price.currency)
  }
  const isDiscounted =
    isMemberRate || isCampaignRate || regularPriceIsHigherThanPrice

  return (
    <>
      <BoldRow
        label={intl.formatMessage({
          id: "priceDetails.roomCharge",
          defaultMessage: "Room charge",
        })}
        value={roomCharge}
        regularValue={regularCharge}
        isDiscounted={isDiscounted}
      />
      {nights > 1 ? (
        <RegularRow label={averagePriceTitle} value={avgeragePricePerNight} />
      ) : null}
      <BedTypeRow bedType={bedType} currency={price.currency} />
      <PackagesRow packages={packages} />
    </>
  )
}
