import { formClassName, formHelpClassName } from '@admin/components/ui/field-styles';
import { useFormResponse } from '@admin/hooks/use-form-response';
import { useSingletonPermissions } from '@admin/hooks/use-singleton-permissions';
import { dashboardPersistentLayout } from '@admin/layouts/dashboard-page-layout';
import {
    HomeSectionFormFields,
    type HomeSectionFormData,
} from '@admin/pages/sections/home/home-section-form-fields';
import { cn } from '@admin/lib/utils';
import { Head, useForm } from '@inertiajs/react';
import { FormEvent } from 'react';

type EditHomeSectionProps = {
    section: HomeSectionFormData;
    exists: boolean;
};

function EditHomeSection({ section, exists }: EditHomeSectionProps) {
    const { canEdit } = useSingletonPermissions('home-section');
    const { data, setData, put, processing, errors } = useForm(section);

    const action = useFormResponse({
        loadingMessage: exists ? 'Saving changes...' : 'Creating home page section...',
    });

    const handleSubmit = (event: FormEvent) => {
        event.preventDefault();

        put('/admin/api/sections/home', {
            onStart: action.onStart,
            onSuccess: action.onSuccess,
            onError: action.onError,
            preserveScroll: true,
        });
    };

    return (
        <>
            <Head title="Home page section" />

            <div className="grid grid-cols-12 gap-6">
                <div className="col-span-12">
                    <p className={cn('mb-4', formHelpClassName)}>
                        {exists
                            ? 'Edit the single home page section record used across the public site.'
                            : 'No home page section yet — save once to create it, then continue editing here.'}
                    </p>

                    <form className={formClassName} noValidate onSubmit={handleSubmit}>
                        <HomeSectionFormFields data={data} errors={errors} setData={setData} />

                        {canEdit && (
                            <button type="submit" className="ti-btn ti-btn-primary" disabled={processing}>
                                {exists ? 'Save changes' : 'Save'}
                            </button>
                        )}
                        {!canEdit && <p className={formHelpClassName}>You do not have permission to edit this page.</p>}
                    </form>
                </div>
            </div>
        </>
    );
}

export default Object.assign(EditHomeSection, {
    layout: dashboardPersistentLayout('Home page section', 'Manage homepage section headings and content'),
});
