import React from 'react';
import { Radio, Form } from 'antd';
import type { RadioGroupProps } from 'antd/es/radio';
import type { FormItemProps } from 'antd/es/form';

const { Group } = Radio;

interface RadioOption {
    label: string | React.ReactNode;
    value: string | number;
    disabled?: boolean;
}

interface FormRadioProps extends Omit<RadioGroupProps, 'name'>, Omit<FormItemProps, 'name' | 'children'> {
    name: string | (string | number)[];
    label?: string;
    required?: boolean;
    help?: string;
    options?: RadioOption[];
    buttonStyle?: 'outline' | 'solid';
}

export default function FormRadio({
    name,
    label,
    required = false,
    help,
    options = [],
    buttonStyle,
    rules,
    ...radioProps
}: FormRadioProps) {
    const formRules = required
        ? [{ required: true, message: `${label || 'Campo'} é obrigatório` }, ...(rules || [])]
        : rules;

    return (
        <Form.Item name={name} label={label} rules={formRules} help={help}>
            {buttonStyle ? (
                <Radio.Group buttonStyle={buttonStyle} {...radioProps}>
                    {options.map((option) => (
                        <Radio.Button
                            key={option.value}
                            value={option.value}
                            disabled={option.disabled}
                        >
                            {option.label}
                        </Radio.Button>
                    ))}
                </Radio.Group>
            ) : (
                <Group {...radioProps}>
                    {options.map((option) => (
                        <Radio key={option.value} value={option.value} disabled={option.disabled}>
                            {option.label}
                        </Radio>
                    ))}
                </Group>
            )}
        </Form.Item>
    );
}
