"use client";

import Image from "next/image";
import Link from "next/link";
import { useEffect, useState } from "react";
import { Menu, X, ShieldCheck, BarChart3, Users, CircleCheckBig } from "lucide-react";
import { AnimatePresence, motion, type Variants } from "framer-motion";
import { Button } from "@/components/button";
import { cn } from "@/lib/utils";
import {
  heroContent,
  heroFeatures,
  services,
  clients,
  products,
  segments,
  accreditationMapping,
  impactScenario,
  processSteps,
  technologies,
  navigationLinks,
} from "@/lib/content";
import { ContactForm } from "@/components/contact-form";

const fadeUp: Variants = {
  hidden: { opacity: 0, y: 24 },
  visible: (custom?: number) => ({
    opacity: 1,
    y: 0,
    transition: {
      duration: 0.7,
      ease: [0.22, 1, 0.36, 1] as const,
      delay: custom ?? 0,
    },
  }),
};

const staggerChildren: Variants = {
  visible: {
    transition: {
      staggerChildren: 0.15,
      delayChildren: 0.2,
    },
  },
};

const secondaryButtonClass =
  "border border-[#1d6fbf]/45 bg-white text-[#174e7a] shadow-[0_12px_28px_rgba(13,38,79,0.08)] hover:bg-[#e4f1ff] focus-visible:outline-[#1d6fbf]/60";

export function NovaDesign() {
  const [menuOpen, setMenuOpen] = useState(false);
  const [scrolled, setScrolled] = useState(false);

  useEffect(() => {
    const handleScroll = () => {
      setScrolled(window.scrollY > 8);
    };

    handleScroll();
    window.addEventListener("scroll", handleScroll);
    return () => window.removeEventListener("scroll", handleScroll);
  }, []);

  useEffect(() => {
    if (menuOpen) {
      const original = document.body.style.overflow;
      document.body.style.overflow = "hidden";
      return () => {
        document.body.style.overflow = original;
      };
    }
    return () => undefined;
  }, [menuOpen]);

  const closeMenu = () => setMenuOpen(false);

  return (
    <div className="software-pattern-bg min-h-screen text-slate-900">
      <div className="relative">
        <motion.header
          initial={{ opacity: 0, y: -14 }}
          animate={{ opacity: 1, y: 0 }}
          transition={{ duration: 0.6, ease: [0.22, 1, 0.36, 1] as const }}
          className={cn(
            "sticky top-0 z-50 bg-white/55 px-6 py-5 transition-all duration-300 backdrop-blur-md md:px-8 md:py-6",
            scrolled ? "bg-white/82" : "bg-transparent",
          )}
        >
          <div className="mx-auto flex w-full max-w-[1400px] items-center justify-between gap-5">
            <Link href="#hero" className="flex items-center gap-4 transition hover:opacity-90">
              <motion.div
                className="relative h-16 w-48 will-change-transform"
                animate={{ y: [0, -4, 0] }}
                transition={{ duration: 4.8, repeat: Number.POSITIVE_INFINITY, ease: "easeInOut" }}
              >
                <Image
                  src="/images/LogoGizMedic.png"
                  alt="Gizmedic"
                  fill
                  quality={100}
                  sizes="192px"
                  className="object-contain"
                  priority
                />
              </motion.div>
            </Link>

            <nav className="hidden items-center gap-7 text-base font-medium text-slate-600 lg:flex">
              {navigationLinks.map((link) => (
                <Link
                  key={link.href}
                  href={link.href}
                  className="group relative pb-1 transition hover:text-[#0f4e7a]"
                >
                  {link.label}
                  <span className="absolute inset-x-0 -bottom-0.5 h-px origin-center scale-x-0 bg-[#1d6fbf] transition group-hover:scale-x-100" />
                </Link>
              ))}
            </nav>

            <div className="hidden items-center gap-3 md:flex">
              <Button
                href="#casos"
                variant="ghost"
                className="rounded-md border border-slate-200/70 bg-white px-5 py-2.5 text-sm font-medium text-slate-600 shadow-sm hover:border-[#1d6fbf]/40"
              >
                Ver impacto
              </Button>
              <Button href="#contacto" variant="primary" className="rounded-md px-6 py-3 text-sm font-semibold">
                Agenda una demo
              </Button>
            </div>

            <button
              type="button"
              onClick={() => setMenuOpen((prev) => !prev)}
              aria-expanded={menuOpen}
              aria-label="Abrir menú de navegación"
              className="inline-flex h-12 w-12 items-center justify-center rounded-md border border-slate-200/70 bg-white text-slate-600 shadow-sm transition hover:border-[#1d6fbf]/40 md:hidden"
            >
              {menuOpen ? <X className="h-5 w-5" /> : <Menu className="h-5 w-5" />}
            </button>
          </div>

          <MobileMenu menuOpen={menuOpen} closeMenu={closeMenu} />
        </motion.header>

        <HeroSection />
      </div>

      <main className="mx-auto flex w-full max-w-[1400px] flex-col gap-8 px-6 pb-8 pt-4 md:gap-10 md:pb-10 md:pt-6">
        <ServicesSection />
        <ClientsSection />
        <ProductsSection />
        <SegmentsSection />
        <AccreditationSection />
        <ImpactSection />
        <ProcessSection />
        <TechSection />
        <ContactSection />
      </main>

      <footer className="border-t border-slate-200 bg-white py-6">
        <div className="mx-auto flex w-full max-w-[1400px] flex-col gap-3 px-6 text-xs text-slate-500 sm:flex-row sm:items-center sm:justify-between">
          <span>© {new Date().getFullYear()} Gizmedic. Gestión Hospitalaria Digital.</span>
          <div className="flex flex-wrap gap-4">
            <Link href="#servicios" className="hover:text-slate-900">
              Servicios
            </Link>
            <Link href="#casos" className="hover:text-slate-900">
              Casos
            </Link>
            <Link href="#contacto" className="hover:text-slate-900">
              Contacto
            </Link>
          </div>
        </div>
      </footer>
    </div>
  );
}

function MobileMenu({ menuOpen, closeMenu }: { menuOpen: boolean; closeMenu: () => void }) {
  return (
    <AnimatePresence>
      {menuOpen ? (
        <motion.nav
          initial={{ opacity: 0, y: -12 }}
          animate={{ opacity: 1, y: 0 }}
          exit={{ opacity: 0, y: -12 }}
          transition={{ duration: 0.24, ease: [0.22, 1, 0.36, 1] as const }}
          className="fixed inset-x-0 top-[96px] z-40 border-t border-white/70 bg-white/95 backdrop-blur-md shadow-[0_18px_38px_rgba(15,23,42,0.14)] md:hidden"
        >
          <div className="mx-auto flex w-full max-w-[1400px] flex-col gap-3 px-6 py-6 text-sm text-slate-700">
            {navigationLinks.map((link) => (
              <Link
                key={link.href}
                href={link.href}
                onClick={closeMenu}
                className="flex items-center justify-between rounded-xl border border-slate-200 bg-[#f6fbff] px-5 py-3 font-medium text-slate-800 shadow-sm transition hover:border-[#1d6fbf]/40 hover:bg-white"
              >
                <span>{link.label}</span>
                <span className="text-xs uppercase tracking-[0.28em] text-[#1d6fbf]">Ir</span>
              </Link>
            ))}
            <div className="mt-1 flex flex-col gap-2">
              <Button href="#contacto" variant="primary" fullWidth onClick={closeMenu} className="rounded-md">
                Agenda una demo
              </Button>
              <Button
                href="#productos"
                variant="secondary"
                fullWidth
                className="rounded-md border border-[#1d6fbf]/30 bg-white/90 text-[#1d6fbf] shadow-[0_12px_24px_rgba(13,38,79,0.12)] hover:bg-[#eef6ff]"
                onClick={closeMenu}
              >
                Ver módulos
              </Button>
            </div>
          </div>
        </motion.nav>
      ) : null}
    </AnimatePresence>
  );
}

const heroIconMap: Record<string, typeof ShieldCheck> = {
  shield: ShieldCheck,
  chart: BarChart3,
  users: Users,
  check: CircleCheckBig,
};

function HeroSection() {
  return (
    <section id="hero" className="relative w-full overflow-hidden pb-4 pt-2 md:pb-6 md:pt-3">
      <div className="relative xl:min-h-[580px] 2xl:min-h-[675px]">
        <motion.div
          initial={{ opacity: 0, y: 40 }}
          animate={{ opacity: 1, y: 0 }}
          transition={{ delay: 0.3, duration: 0.8, ease: [0.22, 1, 0.36, 1] as const }}
          className="pointer-events-none absolute right-0 top-0 hidden w-[740px] xl:block 2xl:w-[860px]"
        >
          <div
            className="relative aspect-[1448/1086] w-full overflow-hidden"
            style={{
              WebkitMaskImage: "linear-gradient(to right, transparent, black 16%)",
              maskImage: "linear-gradient(to right, transparent, black 16%)",
            }}
          >
            <Image
              src="/images/hero/home2.png"
              alt="Equipo clínico usando las apps de Gizmedic"
              fill
              sizes="1000px"
              className="object-contain object-right-top"
              priority
            />
          </div>
        </motion.div>

        <motion.div
          variants={staggerChildren}
          initial="hidden"
          animate="visible"
          className="relative z-10 mx-auto w-full max-w-[1400px] space-y-6 px-6"
        >
          <motion.span
            variants={fadeUp}
            className="inline-flex items-center gap-2 rounded-full bg-white/80 px-4 py-2 text-[11px] font-medium uppercase tracking-[0.28em] text-[#1d6fbf]"
          >
            {heroContent.eyebrow}
          </motion.span>
          <motion.h1
            variants={fadeUp}
            className="max-w-2xl text-[2.5rem] font-semibold leading-tight text-slate-900 md:text-[3rem]"
          >
            Tecnología que mejora la atención y simplifica la{" "}
            <span className="text-[#1d8ff0]">gestión hospitalaria.</span>
          </motion.h1>
          <motion.p variants={fadeUp} className="max-w-xl xl:max-w-md 2xl:max-w-xl text-base leading-relaxed text-slate-600">
            {heroContent.description}
          </motion.p>
          <motion.div variants={fadeUp} className="flex max-w-xl xl:max-w-md 2xl:max-w-xl flex-col gap-3 sm:flex-row">
            <Button
              href={heroContent.ctas[0].href}
              variant="primary"
              fullWidth
              className="whitespace-nowrap sm:w-auto"
            >
              {heroContent.ctas[0].label}
            </Button>
            <Button
              href={heroContent.ctas[1].href}
              variant="secondary"
              fullWidth
              className={`${secondaryButtonClass} whitespace-nowrap sm:w-auto`}
            >
              {heroContent.ctas[1].label}
            </Button>
          </motion.div>
          <motion.div variants={fadeUp} className="grid max-w-xl xl:max-w-md 2xl:max-w-xl grid-cols-2 gap-x-4 gap-y-5 pt-2 sm:grid-cols-4">
            {heroFeatures.map((feature) => {
              const Icon = heroIconMap[feature.icon];
              return (
                <div key={feature.label} className="flex flex-col items-start gap-2">
                  <span className="inline-flex h-12 w-12 items-center justify-center rounded-2xl bg-[#eaf3ff] text-[#1d70c1]">
                    <Icon className="h-6 w-6" />
                  </span>
                  <span className="text-xs font-medium leading-snug text-slate-700">{feature.label}</span>
                </div>
              );
            })}
          </motion.div>
          <motion.div variants={fadeUp} className="pt-2 xl:hidden">
            <div className="relative aspect-[1448/1086] w-full overflow-hidden rounded-3xl shadow-[0_20px_50px_rgba(15,23,42,0.12)]">
              <Image
                src="/images/hero/home2.png"
                alt="Equipo clínico usando las apps de Gizmedic"
                fill
                sizes="600px"
                className="object-cover object-top"
              />
            </div>
          </motion.div>
        </motion.div>
      </div>
    </section>
  );
}

function ServicesSection() {
  return (
    <section id="servicios" className="space-y-6">
      <motion.div
        initial="hidden"
        animate="visible"
        variants={staggerChildren}
        className="space-y-4"
      >
        <motion.p variants={fadeUp} className="text-xs uppercase tracking-[0.34em] text-[#1d6fbf]">
          Quiénes somos
        </motion.p>
        <motion.p variants={fadeUp} className="max-w-3xl text-lg text-slate-600">
          Gizmedic crea soluciones de salud digital para resolver problemáticas específicas dentro del ámbito
          hospitalario. Nos focalizamos en herramientas de gestión y en soluciones que mejoran la interacción entre
          el personal de cuidado y el paciente.
        </motion.p>
      </motion.div>
      <motion.div
        initial="hidden"
        animate="visible"
        variants={staggerChildren}
        className="grid gap-6 sm:grid-cols-2"
      >
        {services.map((service, index) => (
          <motion.article
            key={service.name}
            custom={index * 0.08}
            variants={fadeUp}
            className="group relative overflow-hidden rounded-3xl bg-white p-6 shadow-sm ring-1 ring-slate-100"
          >
            <div className="absolute inset-x-6 top-0 h-1 rounded-full bg-gradient-to-r from-[#1d70c1] to-[#3ec5ff] opacity-0 transition-opacity group-hover:opacity-100" />
            <h3 className="text-lg font-semibold text-slate-900">{service.name}</h3>
            <p className="mt-3 text-sm text-slate-600">{service.description}</p>
          </motion.article>
        ))}
      </motion.div>
    </section>
  );
}

function ClientsSection() {
  return (
    <section className="space-y-6">
      <motion.p
        initial={{ opacity: 0, y: 24 }}
        animate={{ opacity: 1, y: 0 }}
        transition={{ duration: 0.7, ease: [0.22, 1, 0.36, 1] as const }}
        className="text-center text-xs uppercase tracking-[0.34em] text-[#1d6fbf] sm:text-left"
      >
        Algunos de nuestros clientes
      </motion.p>
      <motion.div
        initial={{ opacity: 0, y: 24 }}
        animate={{ opacity: 1, y: 0 }}
        transition={{ duration: 0.7, delay: 0.1, ease: [0.22, 1, 0.36, 1] as const }}
        className="grid grid-cols-2 gap-x-6 gap-y-4 sm:grid-cols-3 sm:gap-x-10 sm:gap-y-6"
      >
        {clients.map((client) => (
          <div key={client.name} className="flex h-14 items-center justify-center sm:h-16" title={client.name}>
            <div className="relative h-full w-full max-w-[9rem]">
              <Image
                src={`/images/clients/${client.file}.png`}
                alt={client.name}
                fill
                sizes="140px"
                className="object-contain"
              />
            </div>
          </div>
        ))}
      </motion.div>
    </section>
  );
}

function ProductsSection() {
  return (
    <section id="productos" className="space-y-6">
      <motion.div initial="hidden" animate="visible" variants={staggerChildren} className="space-y-4">
        <motion.p variants={fadeUp} className="text-xs uppercase tracking-[0.34em] text-[#1d6fbf]">
          Plataforma central
        </motion.p>
        <motion.h2 variants={fadeUp} className="text-3xl font-semibold text-slate-900">
          Gestión Hospitalaria Mobile.
        </motion.h2>
        <motion.p variants={fadeUp} className="max-w-3xl text-base text-slate-600">
          Incorporamos capas mobile a la gestión hospitalaria apuntando a simplificar procesos, aumentar la
          seguridad y facilitar la trazabilidad. Permite la movilización de procesos al pie de cama con módulos
          para enfermería, camilleros, limpieza, nutrición y soporte.
        </motion.p>
      </motion.div>
      <motion.div
        initial="hidden"
        animate="visible"
        variants={staggerChildren}
        className="grid items-start gap-6 md:grid-cols-2 lg:grid-cols-3"
      >
        {products.map((product, index) => (
          <motion.article
            key={product.name}
            custom={index * 0.08}
            variants={fadeUp}
            className="group relative flex flex-col overflow-hidden rounded-3xl border border-slate-100 bg-white shadow-sm transition hover:-translate-y-1 hover:shadow-[0_30px_70px_rgba(12,38,79,0.12)]"
          >
            {product.image ? (
              <div className="absolute inset-0 z-10 bg-white opacity-0 transition-opacity duration-300 group-hover:opacity-100">
                <Image
                  src={`/images/products/${product.image}.png`}
                  alt={product.name}
                  fill
                  sizes="360px"
                  className="object-cover object-top"
                />
              </div>
            ) : null}
            <div className="flex flex-1 flex-col p-6">
              <h3 className="text-xl font-semibold text-slate-900">{product.name}</h3>
              <p className="mt-3 text-sm text-slate-600">{product.description}</p>
              <div className="mt-6 h-px w-full bg-gradient-to-r from-[#1d70c1]/20 via-transparent to-[#3ec5ff]/30 transition group-hover:from-[#1d70c1]/50 group-hover:to-[#3ec5ff]/60" />
            </div>
          </motion.article>
        ))}
      </motion.div>
    </section>
  );
}

function SegmentsSection() {
  return (
    <section id="segmentos" className="space-y-6">
      <motion.div
        initial="hidden"
        animate="visible"
        variants={staggerChildren}
        className="space-y-4"
      >
        <motion.h2 variants={fadeUp} className="text-3xl font-semibold text-slate-900">
          A quiénes servimos
        </motion.h2>
      </motion.div>
      <motion.div
        initial="hidden"
        animate="visible"
        variants={staggerChildren}
        className="grid gap-6 sm:grid-cols-2 md:grid-cols-4"
      >
        {segments.map((segment, index) => (
          <motion.div
            key={segment.name}
            custom={index * 0.08}
            variants={fadeUp}
            className="rounded-3xl border border-slate-100 bg-white p-6 shadow-sm"
          >
            <h3 className="text-base font-semibold text-slate-900">{segment.name}</h3>
            <p className="mt-3 text-sm text-slate-600">{segment.description}</p>
          </motion.div>
        ))}
      </motion.div>
    </section>
  );
}

function AccreditationSection() {
  return (
    <section id="acreditacion" className="space-y-6">
      <motion.div
        initial="hidden"
        animate="visible"
        variants={staggerChildren}
        className="space-y-4"
      >
        <motion.p variants={fadeUp} className="text-xs uppercase tracking-[0.34em] text-[#1d6fbf]">
          Acreditación
        </motion.p>
        <motion.h2 variants={fadeUp} className="text-3xl font-semibold text-slate-900">
          Apoyo a la Acreditación Joint Commission.
        </motion.h2>
      </motion.div>
      <motion.div initial="hidden" animate="visible" variants={staggerChildren}>
        {accreditationMapping.map((row, index) => (
          <motion.div
            key={row.code}
            custom={index * 0.06}
            variants={fadeUp}
            className={cn(
              "grid gap-4 py-5 sm:grid-cols-[0.9fr_1.1fr_1.6fr] sm:items-start",
              index > 0 && "border-t border-slate-100",
            )}
          >
            <p className="text-sm font-semibold uppercase tracking-[0.18em] text-[#1d6fbf]">{row.code}</p>
            <p className="text-sm font-medium text-slate-900">{row.area}</p>
            <p className="text-sm text-slate-600">{row.detail}</p>
          </motion.div>
        ))}
      </motion.div>
    </section>
  );
}

function ImpactSection() {
  return (
    <section id="casos" className="space-y-6">
      <motion.div
        initial="hidden"
        animate="visible"
        variants={staggerChildren}
        className="flex flex-wrap items-end justify-between gap-4"
      >
        <motion.div variants={fadeUp}>
          <p className="text-xs uppercase tracking-[0.34em] text-[#1d6fbf]">{impactScenario.eyebrow}</p>
          <h2 className="text-3xl font-semibold text-slate-900">{impactScenario.title}</h2>
        </motion.div>
        <motion.div variants={fadeUp}>
          <Button href="#contacto" variant="secondary" className={secondaryButtonClass}>
            Solicitar briefing
          </Button>
        </motion.div>
      </motion.div>
      <motion.div initial="hidden" animate="visible" variants={staggerChildren}>
        <motion.p variants={fadeUp} className="text-sm font-medium text-slate-900">
          {impactScenario.context}
        </motion.p>
        <motion.ul variants={fadeUp} className="mt-5 grid gap-3 sm:grid-cols-2">
          {impactScenario.impact.map((item) => (
            <li key={item} className="flex items-start gap-2 text-sm text-slate-600">
              <span className="mt-1.5 h-1.5 w-1.5 flex-none rounded-full bg-[#1d6fbf]" />
              {item}
            </li>
          ))}
        </motion.ul>
      </motion.div>
    </section>
  );
}

function ProcessSection() {
  return (
    <section id="metodologia" className="space-y-6">
      <motion.div
        initial="hidden"
        animate="visible"
        variants={staggerChildren}
        className="space-y-4"
      >
        <motion.h2 variants={fadeUp} className="text-3xl font-semibold text-slate-900">
          ¿Por dónde empezamos?
        </motion.h2>
      </motion.div>
      <motion.ol
        initial="hidden"
        animate="visible"
        variants={staggerChildren}
        className="grid gap-6 md:grid-cols-3"
      >
        {processSteps.map((step, index) => (
          <motion.li
            key={step}
            custom={index * 0.08}
            variants={fadeUp}
            className="rounded-3xl bg-white p-6 shadow-sm ring-1 ring-slate-100"
          >
            <p className="text-xs font-semibold uppercase tracking-[0.3em] text-[#1d6fbf]">{index + 1}</p>
            <h3 className="mt-3 text-base font-semibold text-slate-900">{step}</h3>
          </motion.li>
        ))}
      </motion.ol>
    </section>
  );
}

function TechSection() {
  return (
    <section className="space-y-6">
      <motion.div
        initial="hidden"
        animate="visible"
        variants={staggerChildren}
        className="flex flex-wrap items-end justify-between gap-4"
      >
        <motion.h2 variants={fadeUp} className="text-3xl font-semibold text-slate-900">
          Stack interoperable
        </motion.h2>
        <motion.p variants={fadeUp} className="text-xs uppercase tracking-[0.3em] text-slate-400">
          Tecnologias
        </motion.p>
      </motion.div>
      <motion.div
        initial="hidden"
        animate="visible"
        variants={staggerChildren}
        className="flex flex-wrap gap-3"
      >
        {technologies.map((tech, index) => (
          <motion.span
            key={tech}
            custom={index * 0.05}
            variants={fadeUp}
            className="rounded-full border border-[#94c7ea] bg-[#f0f7ff] px-4 py-2 text-sm text-[#1d6fbf]"
          >
            {tech}
          </motion.span>
        ))}
      </motion.div>
    </section>
  );
}

function ContactSection() {
  return (
    <section id="contacto" className="grid gap-10 md:grid-cols-[0.9fr_1.1fr]">
      <motion.div
        initial="hidden"
        animate="visible"
        variants={staggerChildren}
        className="space-y-5"
      >
        <motion.p variants={fadeUp} className="text-xs uppercase tracking-[0.34em] text-[#1d6fbf]">
          Trabajemos juntos
        </motion.p>
        <motion.p variants={fadeUp} className="text-lg text-slate-600">
          Nuestro equipo está disponible para presentar las soluciones, evaluar su entorno tecnológico y proponer
          un plan de implementación adaptado a las necesidades de su institución.
        </motion.p>
      </motion.div>
      <motion.div
        initial={{ opacity: 0, y: 40 }}
        animate={{ opacity: 1, y: 0 }}
        transition={{ duration: 0.7, ease: [0.22, 1, 0.36, 1] as const }}
      >
        <ContactForm />
      </motion.div>
    </section>
  );
}
