import { type BreadcrumbItem } from '@/types';
import { Transition } from '@headlessui/react';
import { Head, useForm, usePage } from '@inertiajs/react';
import { FormEventHandler } from 'react';

import HeadingSmall from '@/components/heading-small';
import InputError from '@/components/input-error';
import { Button } from '@/components/ui/button';
import ImageUpload from '@/components/ui/imageUpload';
import { Input } from '@/components/ui/input';
import { Label } from '@/components/ui/label';
import AppLayout from '@/layouts/app-layout';
import SettingsLayout from '@/layouts/settings/layout';

const breadcrumbs: BreadcrumbItem[] = [
    {
        title: 'System settings',
        href: '/settings/system',
    },
];

type SystemSetting = {
    title: string;
    email: string;
    number: string;
    system_name: string;
    address: string;
    description: string;
    copyright_text: string;
    logo: string | null;
    favicon: string | null;
};

export default function SystemSettings() {
    const { props } = usePage<{ setting: SystemSetting | null }>();
    const { setting } = props;

    const { data, setData, patch, errors, processing, recentlySuccessful } = useForm({
        title: setting?.title ?? '',
        email: setting?.email ?? '',
        number: setting?.number ?? '',
        system_name: setting?.system_name ?? '',
        address: setting?.address ?? '',
        description: setting?.description ?? '',
        copyright_text: setting?.copyright_text ?? '',
        logo: null as File | null,
        favicon: null as File | null,
    });

    const submit: FormEventHandler = (e) => {
        e.preventDefault();

        patch(route('system.update'), {
            preserveScroll: true,
            forceFormData: true,
        });
    };

    return (
        <AppLayout breadcrumbs={breadcrumbs}>
            <Head title="System settings" />

            <SettingsLayout>
                <div className="space-y-6">
                    <HeadingSmall title="System settings" description="Configure site branding and general system information" />

                    {/* LOGO PREVIEW */}
                    {/* {(setting?.logo || setting?.favicon) && (
                        <div className="space-y-2 rounded-xl border p-4">
                            {setting?.logo && <img src={`/${setting.logo}`} className="h-10" />}
                            {setting?.favicon && <img src={`/${setting.favicon}`} className="h-6" />}
                        </div>
                    )} */}

                    <form onSubmit={submit} className="space-y-6">
                        {/* BASIC INFO */}
                        <div className="grid gap-4 sm:grid-cols-2">
                            <div>
                                <Label>Site Title</Label>
                                <Input value={data.title} onChange={(e) => setData('title', e.target.value)} />
                                <InputError message={errors.title} />
                            </div>

                            <div>
                                <Label>System Name</Label>
                                <Input value={data.system_name} onChange={(e) => setData('system_name', e.target.value)} />
                                <InputError message={errors.system_name} />
                            </div>
                        </div>

                        <div className="grid gap-4 sm:grid-cols-2">
                            <div>
                                <Label>Email</Label>
                                <Input value={data.email} onChange={(e) => setData('email', e.target.value)} />
                                <InputError message={errors.email} />
                            </div>

                            <div>
                                <Label>Phone Number</Label>
                                <Input value={data.number} onChange={(e) => setData('number', e.target.value)} />
                                <InputError message={errors.number} />
                            </div>
                        </div>

                        <div>
                            <Label>Address</Label>
                            <Input value={data.address} onChange={(e) => setData('address', e.target.value)} />
                            <InputError message={errors.address} />
                        </div>

                        {/* DESCRIPTION */}
                        <div>
                            <Label>Description</Label>
                            <textarea
                                value={data.description}
                                onChange={(e) => setData('description', e.target.value)}
                                rows={3}
                                className="w-full rounded-md border p-2"
                            />
                            <InputError message={errors.description} />
                        </div>

                        {/* COPYRIGHT */}
                        <div>
                            <Label>Copyright</Label>
                            <Input value={data.copyright_text} onChange={(e) => setData('copyright_text', e.target.value)} />
                            <InputError message={errors.copyright_text} />
                        </div>

                        {/* FILES */}
                        <div className="grid gap-4 sm:grid-cols-2">
                            <div>
                                <ImageUpload
                                    label="Logo"
                                    value={data.logo}
                                    existingImageUrl={setting?.logo ? `/${setting.logo}` : null}
                                    onChange={(e) => setData('logo', e)}
                                />
                                {/* <Input type="file" onChange={(e) => setData('logo', e.target.files?.[0] ?? null)} /> */}
                                <InputError message={errors.logo} />
                            </div>

                            <div>
                                <ImageUpload
                                    label="Favicon"
                                    value={data.favicon}
                                    existingImageUrl={setting?.favicon ? `/${setting.favicon}` : null}
                                    onChange={(e) => setData('favicon', e)}
                                />
                                {/* <Input type="file" onChange={(e) => setData('favicon', e.target.files?.[0] ?? null)} /> */}
                                <InputError message={errors.favicon} />
                            </div>
                        </div>

                        {/* BUTTON */}
                        <div className="flex items-center gap-4">
                            <Button disabled={processing}>Save Settings</Button>

                            <Transition
                                show={recentlySuccessful}
                                enter="transition ease-in-out"
                                enterFrom="opacity-0"
                                leave="transition ease-in-out"
                                leaveTo="opacity-0"
                            >
                                <p className="text-sm text-neutral-600">Saved</p>
                            </Transition>
                        </div>
                    </form>
                </div>
            </SettingsLayout>
        </AppLayout>
    );
}
