const { useState, useEffect } = React;
const { Icon } = window;

const SB_URL = 'https://zrwpzetcfdpicjfdvikt.supabase.co';
const SB_ANON = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Inpyd3B6ZXRjZmRwaWNqZmR2aWt0Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3NzQ5NDAwNTUsImV4cCI6MjA5MDUxNjA1NX0.huMkumw8BbEyxbnYnc9ijuMzRhK9jZ1jYe0bHV_jyWE';

function Nav({ theme, setTheme }) {
  const [scrolled, setScrolled] = useState(false);
  const [mobileMenuOpen, setMobileMenuOpen] = useState(false);
  const [isMobile, setIsMobile] = useState(false);
  const [avatarUrl, setAvatarUrl] = useState(null);

  useEffect(() => {
    const h = () => setScrolled(window.scrollY > 20);
    const checkMobile = () => setIsMobile(window.innerWidth < 768);
    h();
    checkMobile();
    window.addEventListener('scroll', h, { passive: true });
    window.addEventListener('resize', checkMobile, { passive: true });
    return () => {
      window.removeEventListener('scroll', h);
      window.removeEventListener('resize', checkMobile);
    };
  }, []);

  useEffect(() => {
    try {
      const raw = localStorage.getItem('sb-zrwpzetcfdpicjfdvikt-auth-token');
      if (!raw) return;
      const session = JSON.parse(raw);
      const accessToken = session?.access_token;
      if (!accessToken) return;
      const payload = JSON.parse(atob(accessToken.split('.')[1].replace(/-/g, '+').replace(/_/g, '/')));
      const userId = payload?.sub;
      if (!userId) return;
      fetch(`${SB_URL}/rest/v1/profiles?select=avatar_url&id=eq.${userId}`, {
        headers: { 'apikey': SB_ANON, 'Authorization': `Bearer ${accessToken}` },
      }).then(r => r.json()).then(data => {
        if (data?.[0]?.avatar_url) setAvatarUrl(data[0].avatar_url);
      }).catch(() => {});
    } catch {}
  }, []);

  // Tailles qui se réduisent légèrement au scroll pour un effet "compacte"
  const padX = scrolled ? 14 : 28;
  const padY = scrolled ? 8 : 16;
  const gap  = scrolled ? 28 : 44;
  const fontSize = scrolled ? 13 : 15;
  const toggleSize = scrolled ? 28 : 38;

  // Navigation mobile
  if (isMobile) {
    const LINKS = [
      { href: '#platform', label: 'Plateforme' },
      { href: '#fonctionnalites', label: 'Fonctionnalités' },
      { href: '#parcours', label: 'Formation' },
      { href: '#pricing', label: 'Tarifs' },
      { href: '#faq', label: 'FAQ' },
    ];
    return (
      <>
        <style>{`
          .mobile-nav-link {
            padding: 9px 12px;
            font-size: 14px;
            color: var(--ink);
            text-decoration: none;
            border-radius: 10px;
            display: block;
            transition: background 0.15s;
          }
          .mobile-nav-link:hover { background: var(--bg-elev); }
          .mobile-menu-enter { animation: menuSlideIn 0.22s cubic-bezier(.2,.7,.2,1) forwards; }
          @keyframes menuSlideIn {
            from { opacity: 0; transform: translateX(-50%) translateY(-6px) scale(0.97); }
            to   { opacity: 1; transform: translateX(-50%) translateY(0) scale(1); }
          }
          .mobile-nav { animation: navIn 0.7s cubic-bezier(.2,.7,.2,1) both; }
          @keyframes navIn {
            from { opacity: 0; transform: translateX(-50%) translateY(-24px); filter: blur(10px); }
            to   { opacity: 1; transform: translateX(-50%) translateY(0); filter: blur(0); }
          }
        `}</style>

        {/* Barre mobile — shrink au scroll comme desktop */}
        <nav className="mobile-nav" style={{
          position: 'fixed',
          top: scrolled ? 8 : 12,
          left: '50%',
          transform: 'translateX(-50%)',
          zIndex: 100,
          display: 'flex',
          alignItems: 'center',
          justifyContent: 'space-between',
          gap: 8,
          padding: scrolled ? '6px 8px 6px 12px' : '8px 10px 8px 14px',
          borderRadius: 999,
          background: scrolled
            ? 'color-mix(in oklab, var(--bg-card) 95%, transparent)'
            : 'color-mix(in oklab, var(--bg-card) 75%, transparent)',
          backdropFilter: 'blur(20px) saturate(1.4)',
          border: '1px solid var(--line)',
          width: 'calc(100vw - 32px)',
          maxWidth: scrolled ? 340 : 380,
          boxSizing: 'border-box',
          transition: 'top 0.35s cubic-bezier(.2,.7,.2,1), padding 0.35s cubic-bezier(.2,.7,.2,1), max-width 0.35s cubic-bezier(.2,.7,.2,1), background 0.3s ease',
        }}>
          {/* Gauche : hamburger */}
          <div style={{ display: 'flex', alignItems: 'center', flexShrink: 0 }}>
            {/* Hamburger */}
            <button
              onClick={() => setMobileMenuOpen(o => !o)}
              aria-label="Menu"
              style={{
                width: scrolled ? 26 : 28, height: scrolled ? 26 : 28,
                borderRadius: 999, border: '1px solid var(--line)',
                display: 'flex', alignItems: 'center', justifyContent: 'center',
                color: 'var(--ink)', background: 'var(--bg-elev)', flexShrink: 0,
                transition: 'all 0.25s',
              }}
            >
              {mobileMenuOpen ? <Icon.Close size={11} /> : <Icon.Menu size={11} />}
            </button>
          </div>

          {/* Centre : VIZION */}
          <a href="#" style={{
            position: 'absolute', left: '50%', transform: 'translateX(-50%)',
            fontWeight: 700, fontSize: scrolled ? 15 : 17,
            letterSpacing: '0.06em', textDecoration: 'none', color: 'var(--ink)',
            pointerEvents: 'auto',
          }}>VIZION</a>

          {/* Droite : user + thème */}
          <div style={{ display: 'flex', alignItems: 'center', gap: 5, flexShrink: 0 }}>
            <a href="/app" aria-label="Accéder" style={{
              width: scrolled ? 26 : 28, height: scrolled ? 26 : 28,
              borderRadius: 999, border: '1px solid var(--line)',
              display: 'flex', alignItems: 'center', justifyContent: 'center',
              overflow: 'hidden', flexShrink: 0, textDecoration: 'none',
              color: 'var(--ink)', background: avatarUrl ? 'transparent' : 'var(--bg-elev)',
              transition: 'all 0.25s',
            }}>
              {avatarUrl
                ? <img src={avatarUrl} alt="" style={{ width: '100%', height: '100%', objectFit: 'cover' }} />
                : <Icon.User size={11} />
              }
            </a>
            <button onClick={() => setTheme(t => t === 'dark' ? 'light' : 'dark')} aria-label="Thème" style={{
              width: scrolled ? 26 : 28, height: scrolled ? 26 : 28,
              borderRadius: 999, border: '1px solid var(--line)',
              display: 'flex', alignItems: 'center', justifyContent: 'center',
              color: 'var(--ink)', background: 'var(--bg-elev)',
              transition: 'all 0.25s',
            }}>
              {theme === 'dark' ? <Icon.Sun size={11} /> : <Icon.Moon size={11} />}
            </button>
          </div>
        </nav>

        {/* Dropdown menu */}
        {mobileMenuOpen && (
          <div className="mobile-menu-enter" style={{
            position: 'fixed',
            top: 62,
            left: '50%',
            zIndex: 99,
            width: 'calc(100vw - 32px)',
            maxWidth: 380,
            padding: '8px',
            borderRadius: 16,
            background: 'color-mix(in oklab, var(--bg-card) 96%, transparent)',
            backdropFilter: 'blur(24px) saturate(1.4)',
            border: '1px solid var(--line)',
            boxSizing: 'border-box',
          }}>
            {LINKS.map(l => (
              <a key={l.href} href={l.href} className="mobile-nav-link"
                onClick={() => setMobileMenuOpen(false)}>
                {l.label}
              </a>
            ))}
          </div>
        )}
      </>
    );
  }

  // Navigation desktop
  return (
    <nav style={{
      position: 'fixed',
      top: scrolled ? 14 : 32,
      left: '50%',
      transform: `translateX(-50%) scale(${scrolled ? 0.96 : 1})`,
      transformOrigin: 'top center',
      zIndex: 100,
      display: 'flex',
      alignItems: 'center',
      gap,
      padding: `${padY}px ${padX}px ${padY}px ${padX + 6}px`,
      borderRadius: 999,
      background: scrolled ? 'color-mix(in oklab, var(--bg-card) 80%, transparent)' : 'color-mix(in oklab, var(--bg-card) 30%, transparent)',
      backdropFilter: scrolled ? 'blur(20px) saturate(1.4)' : 'blur(8px)',
      border: scrolled ? '1px solid var(--line)' : '1px solid color-mix(in oklab, var(--line) 40%, transparent)',
      animation: 'desktopNavIn 0.7s cubic-bezier(.2,.7,.2,1) both',
      transition: 'top 0.45s cubic-bezier(.2,.7,.2,1), transform 0.45s cubic-bezier(.2,.7,.2,1), padding 0.45s cubic-bezier(.2,.7,.2,1), gap 0.45s cubic-bezier(.2,.7,.2,1), background 0.35s ease, border-color 0.35s ease, backdrop-filter 0.35s ease',
      fontSize,
    }}>
      <a href="#" style={{ display: 'flex', alignItems: 'center', gap: 10, fontWeight: 600, fontSize: 15, letterSpacing: '-0.01em' }}>
        <LogoMark />
        <span>VIZION</span>
      </a>
      <div style={{ display: 'flex', gap: 28, color: 'var(--ink-dim)', transition: 'gap 0.45s cubic-bezier(.2,.7,.2,1)' }}>
        <a href="#platform" className="nav-link">Plateforme</a>
        <a href="#fonctionnalites" className="nav-link">Fonctionnalités</a>
        <a href="#parcours" className="nav-link">Formation</a>
        <a href="#pricing" className="nav-link">Tarifs</a>
        <a href="#faq" className="nav-link">FAQ</a>
      </div>
      <div style={{ display: 'flex', alignItems: 'center', gap: 10 }}>
        {/* Icône connexion / avatar */}
        <a href="/app" aria-label="Connexion" data-cursor="hover" style={{
            width: toggleSize, height: toggleSize, borderRadius: 999,
            display: 'inline-flex', alignItems: 'center', justifyContent: 'center',
            overflow: 'hidden',
            color: 'var(--ink)',
            background: avatarUrl ? 'transparent' : 'color-mix(in oklab, var(--bg-card) 60%, transparent)',
            border: '1px solid var(--line)',
            transition: 'width 0.45s cubic-bezier(.2,.7,.2,1), height 0.45s cubic-bezier(.2,.7,.2,1), background 0.2s ease',
          }}>
          {avatarUrl
            ? <img src={avatarUrl} alt="" style={{ width: '100%', height: '100%', objectFit: 'cover' }} />
            : <Icon.User size={scrolled ? 12 : 13} />
          }
        </a>
        {/* Toggle thème */}
        <button
          onClick={() => setTheme(theme === 'dark' ? 'light' : 'dark')}
          aria-label="Basculer le thème"
          data-cursor="hover"
          style={{
            width: toggleSize, height: toggleSize, borderRadius: 999,
            display: 'inline-flex', alignItems: 'center', justifyContent: 'center',
            color: 'var(--ink)',
            background: 'color-mix(in oklab, var(--bg-card) 60%, transparent)',
            border: '1px solid var(--line)',
            marginLeft: 4,
            transition: 'width 0.45s cubic-bezier(.2,.7,.2,1), height 0.45s cubic-bezier(.2,.7,.2,1), background 0.2s ease, border-color 0.2s ease',
          }}>
          {theme === 'dark' ? <Icon.Sun size={scrolled ? 12 : 13} /> : <Icon.Moon size={scrolled ? 12 : 13} />}
        </button>
      </div>
      <style>{`
        .nav-link { transition: color 0.2s; }
        .nav-link:hover { color: var(--ink); }
        @keyframes desktopNavIn {
          from { opacity: 0; transform: translateX(-50%) translateY(-28px); filter: blur(12px); }
          to   { opacity: 1; transform: translateX(-50%) translateY(0); filter: blur(0); }
        }
      `}</style>
    </nav>
  );
}

function LogoMark({ size = 22 }) {
  return (
    <svg width={size} height={size} viewBox="0 0 24 24" fill="none">
      <rect x="2" y="2" width="20" height="20" rx="6" fill="var(--accent)" />
      <path d="M7 8L12 16L17 8" stroke="var(--bg)" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round"/>
    </svg>
  );
}

Object.assign(window, { Nav, LogoMark });
