import React from 'react';
import { DatePicker, Form } from 'antd';
import type { DatePickerProps } from 'antd/es/date-picker';
import type { FormItemProps } from 'antd/es/form';
import { DATE_FORMAT_BR_MASK, withAntdDateInputMask } from '@/lib/format/antdDateFormat';

interface FormDatePickerProps extends Omit<DatePickerProps, 'name'> {
    /** Quando omitido, renderiza DatePicker controlado sem Form.Item (filtros avançados). */
    name?: string | (string | number)[];
    label?: string;
    required?: boolean;
    help?: string;
    /** String dayjs ou objeto com `type: 'mask'` (padrão: máscara DD/MM/YYYY). */
    format?: DatePickerProps['format'];
    showTime?: boolean;
    placeholder?: string;
    rules?: FormItemProps['rules'];
}

export default function FormDatePicker({
    name,
    label,
    required = false,
    help,
    format = DATE_FORMAT_BR_MASK,
    showTime = false,
    placeholder = 'Selecione a data',
    rules,
    ...datePickerProps
}: FormDatePickerProps) {
    const formRules = required
        ? [{ required: true, message: `${label || 'Campo'} é obrigatório` }, ...(rules || [])]
        : rules;

    const resolvedFormat =
        typeof format === 'string' ? withAntdDateInputMask(format) : format;

    const picker = (
        <DatePicker
            format={resolvedFormat}
            showTime={showTime}
            placeholder={placeholder}
            style={{ width: '100%' }}
            {...datePickerProps}
        />
    );

    if (name == null) {
        return picker;
    }

    return (
        <Form.Item name={name} label={label} rules={formRules} help={help}>
            {picker}
        </Form.Item>
    );
}
