import React from 'react';
import { InputNumber, Form } from 'antd';
import type { InputNumberProps } from 'antd/es/input-number';
import type { FormItemProps } from 'antd/es/form';

interface FormNumberProps extends Omit<InputNumberProps, 'name'> {
    name: string | (string | number)[];
    label?: string;
    required?: boolean;
    help?: string;
    /** Texto de apoio abaixo do campo (Form.Item `extra`). */
    extra?: React.ReactNode;
    /** Valor inicial do Form.Item (Ant Design). */
    initialValue?: FormItemProps['initialValue'];
    min?: number;
    max?: number;
    precision?: number;
    step?: number;
    rules?: FormItemProps['rules'];
}

export default function FormNumber({
    name,
    label,
    required = false,
    help,
    extra,
    initialValue,
    min,
    max,
    precision,
    step = 1,
    rules,
    ...inputNumberProps
}: FormNumberProps) {
    const formRules = required
        ? [{ required: true, message: `${label || 'Campo'} é obrigatório` }, ...(rules || [])]
        : rules;

    return (
        <Form.Item name={name} label={label} rules={formRules} help={help} extra={extra} initialValue={initialValue}>
            <InputNumber
                min={min}
                max={max}
                precision={precision}
                step={step}
                style={{ width: '100%' }}
                {...inputNumberProps}
            />
        </Form.Item>
    );
}
