import { Head, Link, router } from '@inertiajs/react';
import { useState } from 'react';

import { SystemRecordActions } from '@/components/admin/system-record-actions';
import { PaginationLinks } from '@/components/ui/pagination-links';
import { AdminLayout } from '@/layouts/admin-layout';
import type { PaginatedData } from '@/types';

type VariantRow = {
    id: number;
    make: string | null;
    model: string | null;
    generation: string | null;
    engine: string | null;
    fuel_type: string | null;
    body_type: string | null;
    year_from: number | null;
    year_to: number | null;
    is_active: boolean;
    is_system: boolean;
    fitments_count: number;
    label: string;
    updated_at: string | null;
};

type VariantIndexProps = {
    variants: PaginatedData<VariantRow>;
    filters: {
        search: string;
    };
};

export default function VehicleVariantIndex({
    variants,
    filters,
}: VariantIndexProps) {
    const [search, setSearch] = useState(filters.search || '');

    const submitSearch = (event: React.FormEvent<HTMLFormElement>) => {
        event.preventDefault();

        router.get('/admin/vehicle-variants', search ? { search } : {}, {
            preserveState: true,
            replace: true,
            preserveScroll: true,
        });
    };

    const deleteVariant = (id: number) => {
        if (!window.confirm('Delete this variant record?')) {
            return;
        }

        router.delete(`/admin/vehicle-variants/${id}`);
    };

    return (
        <AdminLayout>
            <Head title="Vehicle Variant" />

            <div className="space-y-5">
                <div className="flex flex-wrap items-center justify-between gap-3">
                    <div>
                        <h1 className="text-2xl font-semibold text-[#0a1530] dark:text-[#efe8ff]">
                            Vehicle Variant
                        </h1>
                        <p className="mt-1 text-sm text-slate-600 dark:text-[#c7bde8]">
                            Manage concrete variant records in the Brand /
                            Generation / Model / Engine hierarchy.
                        </p>
                    </div>
                    <Link
                        href="/admin/vehicle-variants/create"
                        className="rounded-lg bg-[#0b7285] px-4 py-2 text-sm font-semibold text-white hover:bg-[#095f6f] dark:bg-[#7c3aed] dark:hover:bg-[#8b5cf6]"
                    >
                        Add Variant
                    </Link>
                </div>

                <form
                    onSubmit={submitSearch}
                    className="flex max-w-md flex-col gap-2 sm:flex-row"
                >
                    <input
                        value={search}
                        onChange={(event) => setSearch(event.target.value)}
                        placeholder="Search by vehicle data"
                        className="w-full rounded-lg border border-slate-300 bg-white px-3 py-2 text-sm text-[#0a1530] outline-none focus:border-[#0b7285] dark:border-[#4a3a78] dark:bg-[#160f2d] dark:text-[#efe8ff] dark:focus:border-[#a78bfa]"
                    />
                    <button
                        type="submit"
                        className="rounded-lg border border-slate-300 px-3 py-2 text-sm font-medium text-slate-700 hover:bg-slate-100 dark:border-[#4a3a78] dark:text-[#e5dcff] dark:hover:bg-[#2a1d50]"
                    >
                        Search
                    </button>
                </form>

                <div className="space-y-3">
                    {variants.data.map((variant) => (
                        <article
                            key={variant.id}
                            className="rounded-xl border border-slate-200 bg-white p-4 dark:border-[#3c2b68] dark:bg-[#211740]"
                        >
                            <p className="font-semibold text-[#0a1530] dark:text-[#efe8ff]">
                                {variant.label}
                            </p>
                            <p className="mt-1 text-xs text-slate-600 dark:text-[#c7bde8]">
                                Assigned products: {variant.fitments_count}
                            </p>
                            <div className="mt-3 flex flex-wrap gap-2">
                                <SystemRecordActions
                                    activeUrl={`/admin/vehicle-variants/${variant.id}/active`}
                                    isActive={variant.is_active}
                                    isSystem={variant.is_system}
                                >
                                    <Link
                                        href={`/admin/vehicle-variants/${variant.id}/edit`}
                                        className="rounded-md border border-slate-300 px-2.5 py-1 text-xs font-medium text-slate-700 hover:bg-slate-100 dark:border-[#4a3a78] dark:text-[#e5dcff] dark:hover:bg-[#2a1d50]"
                                    >
                                        Edit
                                    </Link>
                                    <button
                                        type="button"
                                        onClick={() =>
                                            deleteVariant(variant.id)
                                        }
                                        className="rounded-md border border-rose-200 px-2.5 py-1 text-xs font-medium text-rose-700 hover:bg-rose-50"
                                    >
                                        Delete
                                    </button>
                                </SystemRecordActions>
                            </div>
                        </article>
                    ))}
                </div>

                <div className="flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between">
                    <p className="text-sm text-slate-600 dark:text-[#c7bde8]">
                        Showing {variants.from || 0} to {variants.to || 0} of{' '}
                        {variants.total} variant records
                    </p>
                    <PaginationLinks links={variants.links} />
                </div>
            </div>
        </AdminLayout>
    );
}
