'use client';

import Link from 'next/link';
import { motion } from 'framer-motion';
import { Menu, X } from 'lucide-react';
import { useEffect, useRef, useState } from 'react';
import { config } from '@/lib/config';
import { getRuntimeClientConfig } from '@/lib/runtime-client-config';

type NavbarProps = {
  onOpenLogin?: (targetReturnTo?: string) => void;
  isAuthenticated?: boolean;
};

function LinkIcon() {
  return (
    <svg className="h-4 w-4 text-white" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round">
      <path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" />
      <path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" />
    </svg>
  );
}

function TelegramIcon() {
  return (
    <svg className="h-4 w-4" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
      <path d="M21.8 4.1a1.7 1.7 0 0 0-1.8-.26L3.1 10.8a1.5 1.5 0 0 0 .1 2.8l4.2 1.5 1.7 5.2a1.5 1.5 0 0 0 2.6.5l2.6-3 4.6 3.4a1.7 1.7 0 0 0 2.7-1l2.2-14.2a1.7 1.7 0 0 0-.9-1.9Zm-3.1 3-8.4 7.7a.7.7 0 0 0-.2.3l-.8 2.4-.8-2.5a.8.8 0 0 0-.5-.5l-2.7-1 13.4-5.4Z" />
    </svg>
  );
}

export default function Navbar({ onOpenLogin, isAuthenticated = false }: NavbarProps) {
  const runtimeConfig = getRuntimeClientConfig();
  const projectName = runtimeConfig.projectName || config.projectName;
  const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);
  const mobileMenuRef = useRef<HTMLDivElement | null>(null);

  const closeMobileMenu = () => setIsMobileMenuOpen(false);

  useEffect(() => {
    if (!isMobileMenuOpen) return;

    const handlePointerDown = (event: PointerEvent) => {
      if (!mobileMenuRef.current?.contains(event.target as Node)) {
        setIsMobileMenuOpen(false);
      }
    };

    document.addEventListener('pointerdown', handlePointerDown);

    return () => {
      document.removeEventListener('pointerdown', handlePointerDown);
    };
  }, [isMobileMenuOpen]);

  return (
    <motion.nav
      initial={{ y: -20, opacity: 0 }}
      animate={{ y: 0, opacity: 1 }}
      className="fixed top-0 inset-x-0 z-50 h-20 flex items-center px-6 lg:px-12 backdrop-blur-xl border-b border-white/5 bg-black/40"
    >
      <div className="w-full max-w-7xl mx-auto flex items-center justify-between">
        <Link href="/" className="flex items-center gap-3">
          <div className="h-8 w-8 rounded-lg bg-gradient-to-br from-violet-500 to-[#2AABEE] flex items-center justify-center shadow-lg shadow-violet-500/20">
            <LinkIcon />
          </div>
          <span className="text-xl font-bold tracking-tight text-white">{projectName}</span>
        </Link>

        <nav className="hidden md:flex items-center gap-8 text-sm font-medium text-gray-400">
          <a href="#features" className="hover:text-white transition-colors">Функции</a>
          <Link href="/notes" className="hover:text-white transition-colors">Записки</Link>
          <a href="#analytics" className="hover:text-white transition-colors">Аналитика</a>
          <a href="#pricing" className="hover:text-white transition-colors">Тарифы</a>
        </nav>

        <div className="flex items-center gap-3">
          <div ref={mobileMenuRef} className="relative md:hidden">
            <button
              type="button"
              onClick={() => setIsMobileMenuOpen((value) => !value)}
              className="flex h-10 w-10 items-center justify-center rounded-xl border border-white/10 bg-white/[0.03] text-white transition-all hover:bg-white/10"
              aria-label={isMobileMenuOpen ? 'Закрыть меню' : 'Открыть меню'}
              aria-expanded={isMobileMenuOpen}
              aria-controls="landing-mobile-menu"
            >
              {isMobileMenuOpen ? <X className="h-4 w-4" /> : <Menu className="h-4 w-4" />}
            </button>

            {isMobileMenuOpen ? (
              <motion.div
                id="landing-mobile-menu"
                initial={{ opacity: 0, y: -6, scale: 0.98 }}
                animate={{ opacity: 1, y: 0, scale: 1 }}
                transition={{ duration: 0.16, ease: 'easeOut' }}
                className="absolute right-0 top-12 w-44 rounded-2xl border border-white/10 bg-[#0A0A0A]/95 p-2 shadow-2xl shadow-black/40 backdrop-blur-xl"
              >
                <a href="#features" onClick={closeMobileMenu} className="block rounded-xl px-3 py-2 text-sm font-medium text-gray-300 transition-colors hover:bg-white/10 hover:text-white">Функции</a>
                <Link href="/notes" onClick={closeMobileMenu} className="block rounded-xl px-3 py-2 text-sm font-medium text-gray-300 transition-colors hover:bg-white/10 hover:text-white">Записки</Link>
                <a href="#analytics" onClick={closeMobileMenu} className="block rounded-xl px-3 py-2 text-sm font-medium text-gray-300 transition-colors hover:bg-white/10 hover:text-white">Аналитика</a>
                <a href="#pricing" onClick={closeMobileMenu} className="block rounded-xl px-3 py-2 text-sm font-medium text-gray-300 transition-colors hover:bg-white/10 hover:text-white">Тарифы</a>
              </motion.div>
            ) : null}
          </div>

          <button
            type="button"
            onClick={() => onOpenLogin?.()}
            className="px-4 py-2 text-sm font-medium rounded-xl bg-white/[0.03] border border-white/10 text-white hover:bg-white/10 transition-all flex items-center gap-2"
          >
            <TelegramIcon />
            <span className="hidden sm:inline">{isAuthenticated ? 'Панель' : 'Войти через Telegram'}</span>
            <span className="sm:hidden">{isAuthenticated ? 'Панель' : 'Войти'}</span>
          </button>
        </div>
      </div>
    </motion.nav>
  );
}
