import AuthenticatedLayout from "@/Layouts/AuthenticatedLayout";
import {Head, useForm} from "@inertiajs/react";
import {IAllergy, IMeal, PageProps} from "@/types";
import PrimaryButton from "@/Components/PrimaryButton";
import React, {useState} from "react";
import AllergenesComponents from "@/Components/Allergens";
import InputError from "@/Components/InputError";

export default function Edit({
                                 auth,
                                 meal,
                                 allergies,
                             }: PageProps<{
    meal: IMeal;
    allergies: IAllergy[];
}>) {

    const {
        data,
        setData,
        patch,
        errors,
        processing,
    } = useForm({
        id: meal.id,
        name: meal.name,
        type: meal.type,
        energy_kcal: meal.energy_kcal,
        energy_kj: meal.energy_kj,
        protein: meal.nutritions.protein,
        fat: meal.nutritions.fat,
        saturated_fat: meal.nutritions.saturated_fat,
        carbohydrate: meal.nutritions.carbohydrate,
        sugar: meal.nutritions.sugar,
        salt: meal.nutritions.salt,
        allergens: meal.allergens,
    });

    const handleChange = (
        e: React.ChangeEvent<HTMLInputElement | HTMLSelectElement>
    ) => {
        const {name, value} = e.target;
        setData(name as keyof typeof data, value);
    };

    const handleNutritionChange = (e: React.ChangeEvent<HTMLInputElement>) => {
        const {name, value} = e.target;
        setData(name as keyof typeof data, parseFloat(value));
    };

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

        patch(route("admin.meals.update", {id: meal.id}));
    };

    return (
        <AuthenticatedLayout user={auth.user} header={"Étlap kezelés"} processing={processing}>
            <Head title="Étlap kezelés"/>
            <form onSubmit={handleSubmit}>
                <div className="bg-babolygo-ocean p-4">
                    <div className="grid grid-cols-1 sm:grid-cols-2 gap-4">
                        <div className="col-span-1">
                            <label className="block text-sm font-medium text-gray-700">
                                Név:
                            </label>
                            <input
                                type="text"
                                name="name"
                                value={data.name}
                                onChange={handleChange}
                                className="mt-1 p-2 border rounded w-full"
                            />
                            <InputError
                                message={errors.name}
                                className="mt-2"
                            />
                        </div>
                        <div className="col-span-1">
                            <label className="block text-sm font-medium text-gray-700">
                                Energia (Kcal):
                            </label>
                            <input
                                type="number"
                                name="energy_kcal"
                                value={data.energy_kcal}
                                onChange={handleChange}
                                className="mt-1 p-2 border rounded w-full"
                            />
                            <InputError
                                message={errors.energy_kcal}
                                className="mt-2"
                            />
                        </div>
                        <div className="col-span-1">
                            <label className="block text-sm font-medium text-gray-700">
                                Energia (Kj):
                            </label>
                            <input
                                type="number"
                                name="energy_kj"
                                value={data.energy_kj}
                                onChange={handleChange}
                                className="mt-1 p-2 border rounded w-full"
                            />
                            <InputError
                                message={errors.energy_kj}
                                className="mt-2"
                            />
                        </div>
                        <div className="col-span-1">
                            <label className="block text-sm font-medium text-gray-700">
                                Fehérje (g):
                            </label>
                            <input
                                type="number"
                                name="protein"
                                value={data.protein}
                                onChange={handleNutritionChange}
                                className="mt-1 p-2 border rounded w-full"
                            />
                            <InputError
                                message={errors.protein}
                                className="mt-2"
                            />
                        </div>
                        <div className="col-span-1">
                            <label className="block text-sm font-medium text-gray-700">
                                Zsír (g):
                            </label>
                            <input
                                type="number"
                                name="fat"
                                value={data.fat}
                                onChange={handleNutritionChange}
                                className="mt-1 p-2 border rounded w-full"
                            />
                            <InputError
                                message={errors.fat}
                                className="mt-2"
                            />
                        </div>
                        <div className="col-span-1">
                            <label className="block text-sm font-medium text-gray-700">
                                Telített zsírsav (g):
                            </label>
                            <input
                                type="number"
                                name="saturated_fat"
                                value={data.saturated_fat}
                                onChange={handleNutritionChange}
                                className="mt-1 p-2 border rounded w-full"
                            />
                            <InputError
                                message={errors.saturated_fat}
                                className="mt-2"
                            />
                        </div>
                        <div className="col-span-1">
                            <label className="block text-sm font-medium text-gray-700">
                                Szénhidrát (g):
                            </label>
                            <input
                                type="number"
                                name="carbohydrate"
                                value={data.carbohydrate}
                                onChange={handleNutritionChange}
                                className="mt-1 p-2 border rounded w-full"
                            />
                            <InputError
                                message={errors.carbohydrate}
                                className="mt-2"
                            />
                        </div>
                        <div className="col-span-1">
                            <label className="block text-sm font-medium text-gray-700">
                                Cukor (g):
                            </label>
                            <input
                                type="number"
                                name="sugar"
                                value={data.sugar}
                                onChange={handleNutritionChange}
                                className="mt-1 p-2 border rounded w-full"
                            />
                            <InputError
                                message={errors.sugar}
                                className="mt-2"
                            />
                        </div>
                        <div className="col-span-1">
                            <label className="block text-sm font-medium text-gray-700">
                                Só (g):
                            </label>
                            <input
                                type="number"
                                name="salt"
                                value={data.salt}
                                onChange={handleNutritionChange}
                                className="mt-1 p-2 border rounded w-full"
                            />
                            <InputError
                                message={errors.salt}
                                className="mt-2"
                            />
                        </div>
                        <div className="col-span-1">
                            <label className="block text-sm font-medium text-gray-700">
                                Allergének
                            </label>
                            <input
                                type="text"
                                name="allergens"
                                value={data.allergens}
                                onChange={handleChange}
                                className="mt-1 p-2 border rounded w-full"
                            />
                            <InputError
                                message={errors.allergens}
                                className="mt-2"
                            />
                        </div>
                    </div>
                    <div className="flex flex-col justify-end sm:flex-row sm:space-x-4 mt-6">
                        <PrimaryButton
                            type="submit"
                            className="w-full sm:w-auto"
                        >
                            Mentés
                        </PrimaryButton>
                    </div>
                </div>
            </form>
            <div className="max-w-7xl mx-auto sm:px-6 lg:px-8">
                <div className="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-4 lg:grid-cols-7 gap-4 mt-8">
                    {allergies.map((allergy, index) => {
                        const IconComponent = AllergenesComponents[allergy.componentName];
                        return (
                            <div
                                key={index}
                                className="flex flex-col items-center"
                            >
                                <div className="w-16 h-16 flex justify-center items-center">
                                    <IconComponent className="w-8 h-8"/>
                                </div>
                                <span className="text-center text-sm font-bold mt-1">
                                    {allergy.number}
                                </span>
                                <span className="text-center text-xs mt-1">
                                    {allergy.title}
                                </span>
                            </div>
                        );
                    })}
                </div>
            </div>
        </AuthenticatedLayout>
    );
}
