import { IKid, IPaginator, PageProps } from "@/types";
import AuthenticatedLayout from "@/Layouts/AuthenticatedLayout";
import { Head, Link, router, useForm, usePage } from "@inertiajs/react";
import PaginatorComponent from "@/Components/Paginator";
import EditIcon from "@mui/icons-material/Edit";
import DeleteIcon from "@mui/icons-material/Delete";
import PrimaryButton from "@/Components/PrimaryButton";
import Modal from "@/Components/Modal";
import { useEffect, useState } from "react";
import SearchBar from "@/Components/SearchBar";

export default function KidList({
    auth,
    kids,
}: PageProps<{ kids: IPaginator<IKid> }>) {
    const [selectedKid, setSelectedKid] = useState<IKid | null>(null);
    const { delete: destroy } = useForm();
    const [showDeleteModal, setShowDeleteModal] = useState(false);
    const [processing, setProcessing] = useState(false);

    const handleDelete = () => {
        if (selectedKid) {
            setProcessing(true);
            setShowDeleteModal(false);
            destroy(route("admin.kids.destroy", { id: selectedKid.id }), {
                onFinish: () => {
                    setProcessing(false);
                    setSelectedKid(null);
                },
            });
        }
    };

    const { url } = usePage();

    const [data, setData] = useState<{
        name: string | null;
    }>({
        name: null,
    });

    useEffect(() => {
        const params = new URLSearchParams(url.split("?")[1]);
        params.forEach((value, key) => {
            if (key === "name") {
                setData((prevData) => ({
                    ...prevData,
                    [key]: value,
                }));
            }
        });
    }, [url]);

    const handleSetData = (key: string, value: string | null) => {
        setData((prevData) => ({
            ...prevData,
            [key]: value,
        }));
    };

    const placeholders = {
        name: "Név",
    };
    const types = {
        name: "text",
    };

    const handleFilterFormSubmit = (e: React.FormEvent) => {
        e.preventDefault();
        router.get(
            route("admin.kids.index", {
                _query: data,
            })
        );
    };

    const handleResetFilters = () => {
        setData({ name: null });
        router.get(route("admin.kids.index"));
    };

    return (
        <AuthenticatedLayout
            user={auth.user}
            header={"Gyerek kezelés"}
            processing={processing}
        >
            <Head title="Gyerek kezelés" />
            <div className="m-4 flex flex-col space-y-4 sm:flex-row sm:space-y-0 sm:justify-between sm:items-center">
                <div className="w-full sm:w-auto">
                    <SearchBar
                        handleSubmit={handleFilterFormSubmit}
                        data={data}
                        setData={handleSetData}
                        handleReset={handleResetFilters}
                        placeholders={placeholders}
                        types={types}
                    />
                </div>
                <div className="flex justify-center sm:justify-end w-full sm:w-auto">
                    <Link
                        className="inline-flex items-center rounded-3xl px-4 py-2 bg-babolygo-purple border border-transparent font-semibold text-xs text-white uppercase tracking-widest hover:bg-purple-800 active:bg-purple-900 transition ease-in-out duration-150"
                        href={route("admin.kids.create", {})}
                    >
                        Új gyerek létrehozása
                    </Link>
                </div>
            </div>
            <div className="space-y-4 m-2">
                {kids.data.length > 0 ? (
                    kids.data.map((kid, index) => (
                        <div
                            key={kid.id}
                            className={`p-4 rounded-lg shadow-md space-y-2 hover:bg-blue-300 ${
                                index % 2 === 0
                                    ? "bg-babolygo-ocean"
                                    : "bg-babolygo-ocean bg-opacity-45"
                            }`}
                        >
                            <div className="flex justify-between items-center">
                                <h2 className="text-lg font-semibold">
                                    {kid.full_name}
                                </h2>
                                <div className="flex space-x-2 items-center">
                                    <Link
                                        className="inline-flex items-center rounded-3xl px-4 py-2 bg-purple-600 border border-transparent font-semibold text-xs text-white uppercase tracking-widest hover:bg-purple-800 active:bg-purple-900 transition ease-in-out duration-150"
                                        href={route("admin.kids.edit", {
                                            id: kid.id,
                                        })}
                                        title="Módosítás"
                                    >
                                        <EditIcon />
                                    </Link>
                                    <PrimaryButton
                                        className="inline-flex items-center rounded-3xl px-4 py-2 bg-red-600 border border-transparent font-semibold text-xs text-white uppercase tracking-widest hover:bg-red-800 active:bg-red-900 transition ease-in-out duration-150"
                                        onClick={() => {
                                            setSelectedKid(kid);
                                            setShowDeleteModal(true);
                                        }}
                                        title="Törlés"
                                    >
                                        <DeleteIcon />
                                    </PrimaryButton>
                                </div>
                            </div>
                            <div className="flex flex-col">
                                <span>
                                    Árkategória:{" "}
                                    {kid.price_category?.name ?? "Nincs"}
                                </span>
                                <span>Aktív ettől: {kid.active_from}</span>
                                <span>Aktív eddig: {kid.active_to}</span>
                            </div>
                        </div>
                    ))
                ) : (
                    <p>Nem található eredmény</p>
                )}
            </div>
            <div className="m-5 flex justify-center">
                <PaginatorComponent {...kids} />
            </div>
            <Modal
                show={showDeleteModal}
                onClose={() => setShowDeleteModal(false)}
            >
                <div className="p-6">
                    <h2 className="text-lg font-semibold mb-4">
                        Biztosan törölni szeretnéd?
                    </h2>
                    <p className="mb-4">Ez a művelet nem vonható vissza.</p>
                    <div className="flex justify-end">
                        <PrimaryButton
                            onClick={() => setShowDeleteModal(false)}
                            className=" mr-4"
                        >
                            Mégse
                        </PrimaryButton>
                        <PrimaryButton
                            onClick={handleDelete}
                            className="bg-red-600 text-white px-4 py-2 hover:bg-red-700"
                        >
                            Törlés
                        </PrimaryButton>
                    </div>
                </div>
            </Modal>
        </AuthenticatedLayout>
    );
}
