import { Calendar, LandPlot, PlusIcon } from "lucide-react";

import { useState } from "react";
import { createPortal } from "react-dom";
import { NavLink } from "react-router";

import { CardCut } from "@/shared/ui/CardCut";

const formRoutes = [
  {
    path: "/events/create",
    title: "Event",
    icon: Calendar,
  },
  {
    path: "/place/create",
    title: "Place",
    icon: LandPlot,
  },
];

export const FormNav = () => {
  const [open, setOpen] = useState(false);

  function toggleOpen() {
    setOpen((open) => !open);
  }

  return (
    <div className="relative">
      {open &&
        createPortal(
          <div
            className="fixed inset-0 bg-black/70 backdrop-blur-sm z-30 animate-in fade-in duration-200"
            onClick={() => setOpen(false)}
          />,
          document.body,
        )}
      <div
        className={`absolute bottom-20 right-0 flex flex-col gap-3 items-end transition-all duration-200 ${
          open
            ? "opacity-100 translate-y-0 animate-in fade-in-0 zoom-in-95"
            : "opacity-0 translate-y-4 animate-out fade-out-0 zoom-out-95 pointer-events-none"
        }`}
      >
        {formRoutes.map((route) => {
          const IconComponent = route.icon;
          return (
            <NavLink
              to={route.path}
              key={route.path}
              onClick={toggleOpen}
              className="flex items-center gap-3 group"
            >
              <span className="text-primary text-lg font-medium">
                {route.title}
              </span>
              <CardCut
                className="h-12 aspect-square shadow-lg transition-colors"
                pathClassName="text-primary stroke-[5px] fill-black stroke-primary"
              >
                <IconComponent className="text-white size-5" />
              </CardCut>
            </NavLink>
          );
        })}
      </div>
      <div className="flex items-center gap-3">
        <span
          className={`text-primary text-lg font-medium transition-all duration-200 ${
            open
              ? "opacity-100 translate-x-0"
              : "opacity-0 translate-x-4 pointer-events-none"
          }`}
        >
          Create
        </span>
        <CardCut
          asChild
          className="h-14 aspect-square shadow-lg transition-colors cursor-pointer"
          pathClassName="text-primary stroke-[7px] fill-black stroke-primary"
        >
          <button type="button" onClick={toggleOpen}>
            <PlusIcon
              className={`stroke-white size-8 transition-transform duration-200 ${open ? "rotate-45" : ""}`}
            />
          </button>
        </CardCut>
      </div>
    </div>
  );
};

Graph