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 { AboutFormFields } from '@admin/pages/about/about-form-fields';
import { cn } from '@admin/lib/utils';
import { Head, useForm } from '@inertiajs/react';
import { FormEvent } from 'react';

type AboutPayload = {
    mission: string;
    vision: string;
    motto: string;
    intro: string;
    about_text: string;
    objectives: string;
    about_image: string;
    facebook: string;
    x: string;
    instagram: string;
    linkedin: string;
    address: string;
    email: string;
    primary_phone: string;
    secondary_phone: string;
    whatsapp: string;
};

type EditAboutProps = {
    about: AboutPayload;
    exists: boolean;
};

function EditAbout({ about, exists }: EditAboutProps) {
    const { canEdit } = useSingletonPermissions('about');
    const { data, setData, put, processing, errors } = useForm(about);

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

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

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

    return (
        <>
            <Head title="About us" />

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

                    <form className={formClassName} noValidate onSubmit={handleSubmit}>
                        <AboutFormFields 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(EditAbout, {
    layout: dashboardPersistentLayout('About us', 'Manage company profile and contact details'),
});
