"use client"
import { useState } from "react"
import { useWatch } from "react-hook-form"
import { useIntl } from "react-intl"

import { dt } from "@/lib/dt"

import DatePicker from "@/components/DatePicker"
import GuestsRoomsPickerForm from "@/components/GuestsRoomsPicker"
import GuestsRoomsProvider from "@/components/GuestsRoomsPicker/Provider/GuestsRoomsProvider"
import { SearchIcon } from "@/components/Icons"
import Button from "@/components/TempDesignSystem/Button"
import Caption from "@/components/TempDesignSystem/Text/Caption"

import Search from "./Search"
import Voucher from "./Voucher"

import styles from "./formContent.module.css"

import type { BookingWidgetFormContentProps } from "@/types/components/form/bookingwidget"

export default function FormContent({
  locations,
  formId,
}: BookingWidgetFormContentProps) {
  const intl = useIntl()
  const selectedDate = useWatch({ name: "date" })

  const rooms = intl.formatMessage({ id: "Guests & Rooms" })

  const nights = dt(selectedDate.toDate).diff(dt(selectedDate.fromDate), "days")

  const selectedGuests = useWatch({ name: "rooms" })

  return (
    <>
      <div className={styles.input}>
        <div className={styles.inputContainer}>
          <div className={styles.where}>
            <Search locations={locations} />
          </div>
          <div className={styles.when}>
            <Caption color="red" type="bold">
              {intl.formatMessage(
                { id: "booking.nights" },
                { totalNights: nights > 0 ? nights : 0 }
              )}
            </Caption>
            <DatePicker />
          </div>
          <div className={styles.rooms}>
            <label>
              <Caption color="red" type="bold" asChild>
                <span>{rooms}</span>
              </Caption>
            </label>
            <GuestsRoomsProvider selectedGuests={selectedGuests}>
              <GuestsRoomsPickerForm name="rooms" />
            </GuestsRoomsProvider>
          </div>
        </div>
        <div className={styles.voucherContainer}>
          <Voucher />
        </div>
        <div className={styles.buttonContainer}>
          <Button
            className={styles.button}
            form={formId}
            intent="primary"
            theme="base"
            type="submit"
          >
            <Caption
              color="white"
              type="bold"
              className={styles.buttonText}
              asChild
            >
              <span>{intl.formatMessage({ id: "Search" })}</span>
            </Caption>
            <span className={styles.icon}>
              <SearchIcon color="white" width={28} height={28} />
            </span>
          </Button>
        </div>
      </div>
      <div className={styles.voucherRow}>
        <Voucher />
      </div>
    </>
  )
}
