'use client';

import { isBefore, isSameDay } from 'date-fns';
import { uniq } from 'lodash';

import { Calendar } from '@kit/ui/shadcn/calendar';
import { Card } from '@kit/ui/shadcn/card';
import { cn } from '@kit/ui/utils';

import { useBooking } from './booking.provider';

export default function BookingCalendar() {
  const { selectedDate, setSelectedDate, isLoadingTimeSlots, timeSlots } =
    useBooking();
  const availableDates = uniq(timeSlots?.map((timeSlot) => timeSlot.StartTime));

  return (
    <Card className="mb-4">
      <Calendar
        mode="single"
        selected={selectedDate}
        onSelect={setSelectedDate}
        disabled={(date) => {
          const today = new Date();
          today.setHours(0, 0, 0, 0);
          return (
            isBefore(date, today) ||
            !availableDates.some((dateWithBooking) =>
              isSameDay(date, dateWithBooking),
            )
          );
        }}
        className={cn('rounded-md border', {
          'pointer-events-none rounded-md border opacity-50':
            isLoadingTimeSlots,
        })}
      />
    </Card>
  );
}
