import { FormGroup } from '@admin/components/ui/forms/form-group';
import { FormNumberInput } from '@admin/components/ui/forms/form-number-input';
import { FormSwitch } from '@admin/components/ui/forms/form-switch';

type AdministrativeUnitFormFieldsProps = {
    data: {
        name: string;
        slug: string;
        address: string;
        sort_order: number;
        status: boolean;
    };
    errors: Partial<Record<'name' | 'slug' | 'address' | 'sort_order' | 'status', string>>;
    setData: (key: string, value: unknown) => void;
};

export function AdministrativeUnitFormFields({ data, errors, setData }: AdministrativeUnitFormFieldsProps) {
    return (
        <>
            <FormGroup
                label="Name"
                helpText="Shown on users, templates, and documents. Example: Head Office."
                error={errors.name}
                inputProps={{
                    value: data.name,
                    onChange: (event) => setData('name', event.target.value),
                    required: true,
                }}
            />

            <FormGroup
                label="Slug"
                helpText="Unique code for this unit. Generated from the name if left blank."
                error={errors.slug}
                inputProps={{
                    value: data.slug,
                    placeholder: 'head-office',
                    onChange: (event) => setData('slug', event.target.value),
                }}
            />

            <FormGroup
                label="Address"
                as="textarea"
                helpText="Optional branch address shown on outreach forms. Existing units stay unchanged until you add one."
                error={errors.address}
                inputProps={{
                    value: data.address,
                    rows: 2,
                    onChange: (event) => setData('address', event.target.value),
                }}
            />

            <FormNumberInput
                label="Display order"
                helpText="Lower numbers appear first in unit dropdowns."
                min={0}
                value={data.sort_order}
                error={errors.sort_order}
                required
                onChange={(value) => setData('sort_order', value)}
            />

            <FormSwitch
                id="administrative-unit-status"
                label="Active"
                checked={data.status}
                onChange={(event) => setData('status', event.target.checked)}
            />
        </>
    );
}
