"use client"
import { zodResolver } from "@hookform/resolvers/zod"
import { useRouter } from "next/navigation"
import { FormProvider, useForm } from "react-hook-form"
import { useIntl } from "react-intl"

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

import Button from "@/components/TempDesignSystem/Button"
import Caption from "@/components/TempDesignSystem/Text/Caption"

import FormContent from "./FormContent"
import { bookingWidgetSchema } from "./schema"

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

import { BookingWidgetSchema } from "@/types/components/bookingWidget"

const formId = "booking-widget"

export default function Form() {
  const intl = useIntl()
  const router = useRouter()
  const methods = useForm<BookingWidgetSchema>({
    defaultValues: {
      search: {
        stayType: "",
        stayValue: "",
      },
      nights: {
        // UTC is required to handle requests from far away timezones https://scandichotels.atlassian.net/browse/SWAP-6375 & PET-507
        // This is specifically to handle timezones falling in different dates.
        fromDate: dt().utc().format("DD/MM/YYYY"),
        toDate: dt().utc().add(1, "day").format("DD/MM/YYYY"),
      },
      bookingCode: "",
      redemption: false,
      voucher: false,
      rooms: [
        {
          adults: 1,
          childs: [],
        },
      ],
    },
    mode: "all",
    resolver: zodResolver(bookingWidgetSchema),
    reValidateMode: "onChange",
  })

  function onSubmit(data: BookingWidgetSchema) {
    console.log(data)
    // TODO: Parse data and route accordignly to Select hotel or select room-rate page
    console.log("to be routing")
    router.push("/en/hotelreservation/select-hotel")
  }

  return (
    <section className={styles.section}>
      <form
        onSubmit={methods.handleSubmit(onSubmit)}
        className={styles.form}
        id={formId}
      >
        <FormProvider {...methods}>
          <FormContent />
        </FormProvider>
      </form>
      <Button
        type="submit"
        form={formId}
        size="small"
        theme="base"
        intent="primary"
        className={styles.button}
      >
        <Caption color="white" textTransform="bold">
          {intl.formatMessage({ id: "Find hotels" })}
        </Caption>
      </Button>
    </section>
  )
}
