import { format } from 'date-fns';
import { CalendarIcon } from 'lucide-react';

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

type DatePickerProps = {
    value?: Date | null;
    onChange?: (date: Date | undefined) => void;
    placeholder?: string;
    className?: string;
    disabled?: boolean;
    maxDate?: Date;
};

const defaultMaxDate = new Date(
    new Date().setFullYear(new Date().getFullYear() + 5),
);

export function DatePicker({
    value,
    onChange,
    placeholder = 'Pilih tanggal',
    className,
    disabled,
    maxDate = defaultMaxDate,
}: DatePickerProps) {
    return (
        <Popover>
            <PopoverTrigger asChild>
                <Button
                    variant="outline"
                    className={cn(
                        'w-full justify-start text-left font-normal',
                        !value && 'text-muted-foreground',
                        className,
                    )}
                    disabled={disabled}
                >
                    <CalendarIcon className="mr-2 h-4 w-4" />
                    {value ? format(value, 'dd MMM yyyy') : placeholder}
                </Button>
            </PopoverTrigger>
            <PopoverContent className="w-auto p-0" align="start">
                <Calendar
                    mode="single"
                    selected={value ?? undefined}
                    defaultMonth={value ?? undefined}
                    captionLayout="dropdown"
                    onSelect={onChange}
                    endMonth={maxDate}
                    disabled={maxDate ? { after: maxDate } : undefined}
                />
            </PopoverContent>
        </Popover>
    );
}
