'use client'

import * as React from 'react'
import { CalendarIcon } from '@radix-ui/react-icons'
import { addDays, format } from 'date-fns'
import { DateRange, DayPickerRangeProps } from 'react-day-picker'

import { cn } from '@/lib/utils'
import { Button } from '@/components/ui/button'
import { Calendar } from '@/components/ui/calendar'
import {
  Popover,
  PopoverContent,
  PopoverTrigger,
} from '@/components/ui/popover'

export interface DatePickerWithRangeProps {
  initialRange?: DateRange
  onSelect?: (range: DateRange | undefined) => void
  onChange?: (range: DateRange | undefined) => void
  className?: string
}

export function DatePickerWithRange({
  className,
  initialRange,
  onSelect,
  onChange,
}: DatePickerWithRangeProps) {
  const [date, setDate] = React.useState<DateRange | undefined>(
    initialRange || { from: new Date(), to: addDays(new Date(), 20) }
  )

  const handleSelect = (range: DateRange | undefined) => {
    setDate(range)
    if (onSelect) onSelect(range)
    if (onChange) onChange(range)
  }

  return (
    <div className={cn('grid gap-2', className)}>
      <Popover>
        <PopoverTrigger asChild>
          <Button
            id="date"
            variant={'outline'}
            className={cn(
              'w-[300px] justify-start text-left font-normal',
              !date && 'text-muted-foreground'
            )}
          >
            <CalendarIcon className="mr-2 h-4 w-4" />
            {date?.from ? (
              date.to ? (
                <>
                  {format(date.from, 'LLL dd, y')} -{' '}
                  {format(date.to, 'LLL dd, y')}
                </>
              ) : (
                format(date.from, 'LLL dd, y')
              )
            ) : (
              <span>Pick a date</span>
            )}
          </Button>
        </PopoverTrigger>
        <PopoverContent className="w-auto p-0" align="start">
          <Calendar
            initialFocus
            mode="range"
            defaultMonth={date?.from}
            selected={date}
            onSelect={handleSelect}
            numberOfMonths={2}
            classNames={{
              day: 'p-2', // Default day style
              day_selected: 'day_selected',
              day_range_start: 'day_inRange',
              day_range_end: 'day_inRange',
              day_today: 'day_today',
            }}
          />
        </PopoverContent>
      </Popover>
    </div>
  )
}
