'use client';

import Link from 'next/link';
import { usePathname } from 'next/navigation';
import { useEffect, useRef, useState } from 'react';
import LogoutButton from '../components/dashboard/LogoutButton';

const navigation = [
  { href: '/gestor/dashboard', label: 'Dashboard', mark: 'D' },
  { href: '/gestor/solicitudes', label: 'Solicitudes', mark: 'S' },
  { href: '/gestor/negocios', label: 'Negocios', mark: 'N' },
  { href: '/gestor/productos', label: 'Cupones y productos', mark: 'C' },
];

function isActive(pathname: string, href: string) {
  return href === '/gestor/dashboard' ? pathname === '/gestor' || pathname.startsWith(href) : pathname.startsWith(href);
}

export default function GestorShell({ children }: { children: React.ReactNode }) {
  const pathname = usePathname();
  const currentSection = navigation.find((item) => isActive(pathname, item.href));
  const [accountMenuOpen, setAccountMenuOpen] = useState(false);
  const accountMenuRef = useRef<HTMLDivElement>(null);

  useEffect(() => {
    function closeOnOutsideClick(event: MouseEvent) {
      if (accountMenuRef.current && !accountMenuRef.current.contains(event.target as Node)) {
        setAccountMenuOpen(false);
      }
    }

    function closeOnEscape(event: KeyboardEvent) {
      if (event.key === 'Escape') setAccountMenuOpen(false);
    }

    document.addEventListener('mousedown', closeOnOutsideClick);
    document.addEventListener('keydown', closeOnEscape);
    return () => {
      document.removeEventListener('mousedown', closeOnOutsideClick);
      document.removeEventListener('keydown', closeOnEscape);
    };
  }, []);

  return (
    <div className="flex min-h-screen bg-slate-100 text-slate-900">
      <aside className="hidden w-64 shrink-0 flex-col border-r border-slate-800 bg-slate-900 text-slate-300 lg:flex">
        <div className="flex h-16 items-center gap-3 border-b border-slate-800 px-5">
          <Link href="/gestor" className="flex items-center gap-3">
            <span className="flex h-9 w-9 items-center justify-center rounded-lg bg-blue-600 text-xs font-black text-white">EC</span>
            <span>
              <span className="block text-sm font-bold leading-tight text-white">EntreCupones</span>
              <span className="block text-[10px] font-semibold tracking-[0.16em] text-sky-300">PANEL GESTOR</span>
            </span>
          </Link>
        </div>

        <nav className="flex-1 px-3 py-6">
          <p className="mb-3 px-3 text-[10px] font-semibold uppercase tracking-[0.16em] text-slate-500">Menú principal</p>
          <div className="space-y-1">
            {navigation.map((item) => {
              const active = isActive(pathname, item.href);
              return (
                <Link
                  key={item.href}
                  href={item.href}
                  className={`flex items-center gap-3 rounded-lg px-3 py-2.5 text-xs font-medium transition ${
                    active ? 'bg-blue-600 font-semibold text-white' : 'text-slate-400 hover:bg-slate-800 hover:text-white'
                  }`}
                >
                  <span className={`flex h-6 w-6 items-center justify-center rounded-md text-[10px] font-bold ${active ? 'bg-slate-950/15' : 'bg-slate-800 text-slate-400'}`}>
                    {item.mark}
                  </span>
                  {item.label}
                </Link>
              );
            })}
          </div>
        </nav>

        <div className="space-y-3 border-t border-slate-800 p-4">
          <a
            href="https://entrecupones.com"
            target="_blank"
            rel="noreferrer"
            className="flex items-center justify-between rounded-lg border border-slate-700/70 bg-slate-800/60 px-3 py-2.5 text-xs font-medium text-slate-300 transition hover:bg-slate-800 hover:text-white"
          >
            <span className="truncate">Volver a la tienda</span>
            <span aria-hidden="true" className="text-slate-400">↗</span>
          </a>
          <div className="flex items-center justify-between px-1 text-[10px] text-slate-500">
            <span>© 2026 EntreCupones</span>
            <span>v1.0.0</span>
          </div>
        </div>
      </aside>

      <div className="flex min-w-0 flex-1 flex-col">
        <header className="sticky top-0 z-30 flex min-h-16 items-center justify-between border-b border-slate-200 bg-white px-4 shadow-sm sm:px-6">
          <div className="flex min-w-0 items-center gap-3">
            <Link href="/gestor" className="flex h-9 w-9 shrink-0 items-center justify-center rounded-lg bg-blue-600 text-xs font-black text-white lg:hidden">EC</Link>
            <div className="min-w-0 text-xs font-medium text-slate-500">
              <span className="hidden sm:inline">Gestor / </span>
              <span className="font-semibold text-slate-900">{currentSection?.label || 'Panel'}</span>
            </div>
          </div>
          <div className="flex items-center gap-2 sm:gap-4">
            <a href="https://entrecupones.com" target="_blank" rel="noreferrer" className="hidden rounded-lg border border-slate-200 px-3 py-2 text-xs font-medium text-slate-700 transition hover:bg-slate-50 sm:inline-flex">
              Ir a la tienda <span aria-hidden="true" className="ml-1 text-slate-400">↗</span>
            </a>
            <div className="hidden h-6 w-px bg-slate-200 sm:block" />
            <div ref={accountMenuRef} className="relative">
              <button
                type="button"
                onClick={() => setAccountMenuOpen((open) => !open)}
                aria-expanded={accountMenuOpen}
                aria-haspopup="menu"
                className="flex items-center gap-2 rounded-lg px-2 py-1.5 text-left transition hover:bg-slate-50"
              >
                <div className="flex h-8 w-8 items-center justify-center rounded-full bg-sky-100 text-xs font-bold text-blue-800">GC</div>
                <div className="hidden sm:block">
                  <p className="text-xs font-semibold text-slate-800">Gestor comercial</p>
                  <p className="text-[10px] text-slate-500">Mi cuenta</p>
                </div>
                <span aria-hidden="true" className={`text-xs text-slate-400 transition ${accountMenuOpen ? 'rotate-180' : ''}`}>⌄</span>
              </button>

              {accountMenuOpen && (
                <div role="menu" className="absolute right-0 top-full z-50 mt-2 w-56 rounded-xl border border-slate-200 bg-white p-2 shadow-lg">
                  <div className="border-b border-slate-100 px-3 py-2">
                    <p className="text-xs font-semibold text-slate-900">Gestor comercial</p>
                    <p className="mt-0.5 text-[11px] text-slate-500">Administración de cuenta</p>
                  </div>
                  <Link role="menuitem" href="/gestor/perfil" onClick={() => setAccountMenuOpen(false)} className="mt-1 block rounded-lg px-3 py-2.5 text-xs font-medium text-slate-700 transition hover:bg-sky-50 hover:text-blue-700">
                    Mi perfil y contraseña
                  </Link>
                  <div className="border-t border-slate-100 pt-1">
                    <LogoutButton variant="text" />
                  </div>
                </div>
              )}
            </div>
          </div>
        </header>

        <main className="flex-1">{children}</main>
        <div className="border-t border-slate-200 bg-white px-4 py-3 text-center text-[10px] text-slate-400 lg:hidden">© 2026 EntreCupones · Panel gestor</div>
      </div>
    </div>
  );
}
