"use client"

import { useFormContext } from "react-hook-form"
import { useIntl } from "react-intl"

import Stepper from "@scandic-hotels/design-system/Stepper"
import { Typography } from "@scandic-hotels/design-system/Typography"

import ChildInfoSelector from "./ChildInfoSelector"

import styles from "./child-selector.module.css"

import type { Child } from "@scandic-hotels/trpc/types/child"

type ChildSelectorProps = {
  roomIndex: number
  currentAdults: number
  currentChildren: Child[]
  childrenInAdultsBed: number
}
export default function ChildSelector({
  roomIndex = 0,
  currentAdults,
  childrenInAdultsBed,
  currentChildren,
}: ChildSelectorProps) {
  const intl = useIntl()
  const childrenLabel = intl.formatMessage({
    id: "bookingwidget.dropdown.children",
    defaultMessage: "Children (0–12 years)",
  })
  const { setValue } = useFormContext()

  function increaseChildrenCount(roomIndex: number) {
    if (currentChildren.length < 5) {
      setValue(
        `rooms.${roomIndex}.childrenInRoom.${currentChildren.length}`,
        {
          age: undefined,
          bed: undefined,
        },
        { shouldDirty: true }
      )
    }
  }
  function decreaseChildrenCount(roomIndex: number) {
    if (currentChildren.length > 0) {
      currentChildren.pop()
      setValue(`rooms.${roomIndex}.childrenInRoom`, currentChildren, {
        shouldDirty: true,
      })
    }
  }

  return (
    <>
      <section className={styles.container}>
        <Typography
          variant="Body/Supporting text (caption)/smBold"
          className={styles.label}
        >
          <p>{childrenLabel}</p>
        </Typography>
        <Stepper
          count={currentChildren.length}
          handleOnDecrease={() => {
            decreaseChildrenCount(roomIndex)
          }}
          handleOnIncrease={() => {
            increaseChildrenCount(roomIndex)
          }}
          disableDecrease={currentChildren.length == 0}
          disableIncrease={currentChildren.length == 5}
        />
      </section>
      {currentChildren.map((child, index) => (
        <ChildInfoSelector
          roomIndex={roomIndex}
          index={index}
          child={child}
          adults={currentAdults}
          key={"child_" + index}
          childrenInAdultsBed={childrenInAdultsBed}
        />
      ))}
    </>
  )
}
