import CitySelectInput from '@/Components/CitySelectInput';
import FormInput from '@/Components/FormInput';
import SidebarForm from '@/Components/SidebarForm';
import TextInput from '@/Components/TextInput';
import { City, Company, SidebarFormBodyProps } from '@/types';
import React from 'react';

interface CompanyEditFormProps {
    company: Company;
    children: React.ReactNode;
}

type CompanyFormData = {
    name: string;
    city: City | null;
};

export default function CompanyEditForm({
    company,
    children: trigger,
}: CompanyEditFormProps) {
    const initialData = {
        name: company.name,
        city: company.city ?? null,
    };

    const Body = (
        bodyProps: Partial<SidebarFormBodyProps<CompanyFormData>>,
    ) => {
        const { data, setData, errors, transform } =
            bodyProps as SidebarFormBodyProps<CompanyFormData>;
        transform((data) => ({
            ...data,
            city_id: data.city ? data.city.id : null,
        }));

        return (
            <>
                <FormInput
                    label="Nome"
                    id="name"
                    className="my-4 block w-full"
                    error={errors.name}
                >
                    <TextInput
                        value={data.name}
                        onChange={(e) => setData('name', e.target.value)}
                    />
                </FormInput>
                <FormInput
                    label="Città"
                    id="city"
                    className="my-4 block w-full"
                    error={errors.city}
                >
                    <CitySelectInput
                        value={data.city}
                        onChange={(city) => setData('city', city)}
                    />
                </FormInput>
            </>
        );
    };
    return (
        <SidebarForm
            title="Modifica azienda"
            trigger={trigger}
            submitMethod={'put'}
            submitRoute={route('admin-companies.update', {
                company: company.id,
            })}
            initialData={initialData}
        >
            <Body />
        </SidebarForm>
    );
}
