/* Shared chrome: Header, Footer, StickyCTA, brand atoms */

const { useState, useEffect, useRef, useMemo } = React;

/* ---- Wordmark ---- */
const Wordmark = ({ size = 'md', onClick }) => {
  const s = { sm: 'text-base', md: 'text-[17px]', lg: 'text-xl' }[size] || 'text-[17px]';
  return (
    <a href="#home" className="flex items-center gap-2 group" onClick={(e) => { e.preventDefault(); onClick && onClick(); }}>
      <span className="text-amber-brand dark:text-amber-warm">
        <EagleMark size={22} />
      </span>
      <span className={`font-display font-bold tracking-tighter2 ${s} text-ink dark:text-white`}>
        SpecEagle
      </span>
    </a>
  );
};

/* ---- Theme context-ish (just a hook reading <html>) ---- */
const useTheme = () => {
  const [dark, setDark] = useState(() => document.documentElement.classList.contains('dark'));
  useEffect(() => {
    const obs = new MutationObserver(() => setDark(document.documentElement.classList.contains('dark')));
    obs.observe(document.documentElement, { attributes: true, attributeFilter: ['class'] });
    return () => obs.disconnect();
  }, []);
  const toggle = () => document.documentElement.classList.toggle('dark');
  return [dark, toggle];
};

/* ---- Tag chip ---- */
const Chip = ({ children, tone = 'default', icon = null, className = '' }) => {
  const tones = {
    default: 'bg-paper-soft dark:bg-d-surface text-ink-soft dark:text-d-muted border-line dark:border-d-border',
    amber: 'bg-amber-brand/[0.08] dark:bg-amber-warm/[0.1] text-amber-brand dark:text-amber-warm border-amber-brand/20 dark:border-amber-warm/20',
    ink: 'bg-ink text-white border-ink dark:bg-white dark:text-ink dark:border-white',
    win: 'bg-win/10 text-win dark:text-win-dark border-win/20',
  };
  return (
    <span className={`inline-flex items-center gap-1.5 rounded-full border px-2.5 py-1 text-[11px] font-medium tracking-wide uppercase ${tones[tone]} ${className}`}>
      {icon}
      {children}
    </span>
  );
};

/* ---- Header ---- */
const Header = ({ page, setPage, onOpenLang }) => {
  const [dark, toggleDark] = useTheme();
  const { lang, t } = useLang();
  const [scrolled, setScrolled] = useState(false);
  useEffect(() => {
    const onScroll = () => setScrolled(window.scrollY > 4);
    onScroll();
    window.addEventListener('scroll', onScroll, { passive: true });
    return () => window.removeEventListener('scroll', onScroll);
  }, []);

  const nav = [
    { label: t('nav.phones'),  key: 'phones' },
    { label: t('nav.compare'), key: 'compare' },
    { label: t('nav.best'),    key: 'best' },
    { label: t('nav.brands'),  key: 'brands' },
    { label: t('nav.news'),    key: 'news' },
  ];

  return (
    <header
      className={`sticky top-0 z-40 w-full backdrop-blur transition-shadow ${
        scrolled
          ? 'bg-paper/85 dark:bg-d-bg/80 hair'
          : 'bg-paper/0 dark:bg-d-bg/0'
      }`}
    >
      <div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
        <div className="flex h-14 items-center justify-between gap-4">
          <div className="flex items-center gap-8">
            <Wordmark onClick={() => setPage('home')} />
            <nav className="hidden md:flex items-center gap-1">
              {nav.map((n) => {
                const active = page === n.key;
                return (
                  <button
                    key={n.key}
                    onClick={() => setPage(n.key)}
                    className={`relative px-2.5 py-1.5 text-[13px] font-medium rounded-md transition-colors ${
                      active
                        ? 'text-ink dark:text-white'
                        : 'text-ink-soft hover:text-ink dark:text-d-muted dark:hover:text-white'
                    }`}
                  >
                    {n.label}
                    {active && (
                      <span className="absolute -bottom-px left-2.5 right-2.5 h-px bg-amber-brand dark:bg-amber-warm" />
                    )}
                  </button>
                );
              })}
            </nav>
          </div>

          <div className="flex items-center gap-1 sm:gap-2">
            <button onClick={onOpenLang} className="hidden sm:flex items-center gap-1 px-2 py-1.5 rounded-md text-[12px] font-medium text-ink-soft hover:text-ink dark:text-d-muted dark:hover:text-white" aria-label="Change language">
              <IconGlobe size={14} />
              {lang.toUpperCase()}
              <IconChevronDown size={12} />
            </button>

            <button
              onClick={() => setPage('search')}
              className="p-2 rounded-md text-ink-soft hover:text-ink dark:text-d-muted dark:hover:text-white"
              aria-label="Search"
            >
              <IconSearch size={16} />
            </button>

            <button
              onClick={toggleDark}
              aria-label="Toggle theme"
              className="p-2 rounded-md text-ink-soft hover:text-ink dark:text-d-muted dark:hover:text-white"
            >
              {dark ? <IconSun size={16} /> : <IconMoon size={16} />}
            </button>

            <button className="hidden sm:inline-flex px-3 py-1.5 rounded-md text-[13px] font-medium text-ink-soft hover:text-ink dark:text-d-muted dark:hover:text-white">
              {t('nav.signin')}
            </button>
          </div>
        </div>
      </div>
    </header>
  );
};

/* ---- StickyCTA ---- */
const StickyCTA = ({ onCompare }) => {
  const { t } = useLang();
  const [expanded, setExpanded] = useState(false);
  return (
    <div className="fixed inset-x-0 bottom-0 z-50 pointer-events-none">
      <div className="mx-auto max-w-3xl px-3 pb-3 sm:pb-4 pointer-events-auto">
        <div className="rounded-2xl border border-line/80 dark:border-d-border bg-paper/85 dark:bg-d-surface/85 backdrop-blur-xl shadow-[0_10px_40px_-10px_rgba(10,10,10,0.25)] dark:shadow-[0_10px_40px_-10px_rgba(0,0,0,0.6)] overflow-hidden">
          {!expanded ? (
            <button
              onClick={() => setExpanded(true)}
              className="w-full flex items-center gap-3 px-3 sm:px-4 py-2.5 text-left"
            >
              <span className="flex items-center justify-center w-7 h-7 rounded-md bg-amber-brand/10 text-amber-brand dark:text-amber-warm">
                <IconScale size={15} />
              </span>
              <span className="flex-1 text-[13px] sm:text-[14px] text-ink-soft dark:text-d-muted">
                {t('cta.compact')}
              </span>
              <span className="hidden sm:inline-flex items-center gap-1 text-[11px] font-mono uppercase tracking-wider text-ink-soft dark:text-d-muted">
                ⌘K
              </span>
              <span className="flex items-center gap-1 text-[12px] font-medium text-ink dark:text-white">
                {t('cta.go')}
                <IconArrowRight size={14} />
              </span>
            </button>
          ) : (
            <div className="p-2.5 sm:p-3">
              <div className="flex items-stretch gap-2">
                <div className="flex-1 flex items-center gap-2 rounded-lg border border-line dark:border-d-border bg-paper dark:bg-d-bg px-3 py-2">
                  <span className="text-[10px] font-mono uppercase tracking-wider text-ink-soft dark:text-d-muted">A</span>
                  <input
                    autoFocus
                    placeholder="iPhone 16 Pro Max"
                    className="flex-1 min-w-0 bg-transparent text-[13px] outline-none placeholder:text-ink-soft/60 dark:placeholder:text-d-muted/60"
                  />
                </div>
                <div className="flex items-center text-ink-soft dark:text-d-muted font-mono text-[11px]">vs</div>
                <div className="flex-1 flex items-center gap-2 rounded-lg border border-line dark:border-d-border bg-paper dark:bg-d-bg px-3 py-2">
                  <span className="text-[10px] font-mono uppercase tracking-wider text-ink-soft dark:text-d-muted">B</span>
                  <input
                    placeholder="Galaxy S25 Ultra"
                    className="flex-1 min-w-0 bg-transparent text-[13px] outline-none placeholder:text-ink-soft/60 dark:placeholder:text-d-muted/60"
                  />
                </div>
                <button onClick={onCompare} className="px-3 rounded-lg bg-ink text-white dark:bg-white dark:text-ink text-[12px] font-medium">
                  Go
                </button>
                <button
                  onClick={() => setExpanded(false)}
                  aria-label="Close"
                  className="px-2 rounded-lg text-ink-soft dark:text-d-muted hover:text-ink dark:hover:text-white"
                >
                  <IconX size={16} />
                </button>
              </div>
            </div>
          )}
        </div>
      </div>
    </div>
  );
};

/* ---- Footer ---- */
const Footer = ({ setPage, onOpenLang }) => {
  const { lang, t } = useLang();
  const cols = [
    {
      h: 'Phones',
      links: [
        { label: 'All phones',       to: 'list.all' },
        { label: 'Latest releases',  to: 'list.latest' },
        { label: 'Upcoming',         to: 'list.upcoming' },
        { label: 'Rumors',           to: 'list.rumors' },
        { label: 'Discontinued',     to: 'list.discontinued' },
      ],
    },
    {
      h: 'Compare',
      links: [
        { label: 'Phone vs Phone',   to: 'compare' },
        { label: 'Best for camera',  to: 'best.camera' },
        { label: 'Best for gaming',  to: 'best.gaming' },
        { label: 'Best for battery', to: 'best.battery' },
        { label: 'By price',         to: 'best.value' },
      ],
    },
    {
      h: 'Best Of',
      links: [
        { label: 'Best 2026',         to: 'best' },
        { label: 'Best under $500',   to: 'best.budget' },
        { label: 'Best foldables',    to: 'best.foldable' },
        { label: 'Best small phones', to: 'best.small' },
        { label: 'Best cameras',      to: 'best.camera' },
      ],
    },
    {
      h: 'About',
      links: [
        { label: 'Methodology',         to: 'content.methodology' },
        { label: 'AI Verdict engine',   to: 'content.ai-engine' },
        { label: 'Editorial standards', to: 'content.editorial' },
        { label: 'Press',               to: 'content.press' },
        { label: 'Careers',             to: 'content.careers' },
      ],
    },
  ];

  return (
    <footer className="mt-24 border-t border-line dark:border-d-border bg-paper dark:bg-d-bg">
      <div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 py-14">
        <div className="grid grid-cols-2 md:grid-cols-5 gap-8">
          <div className="col-span-2 md:col-span-1">
            <Wordmark onClick={() => setPage('home')} />
            <p className="mt-4 text-[12px] leading-relaxed text-ink-soft dark:text-d-muted max-w-xs">
              The AI-era authority on phone specs. Sharper data. Faster verdicts. Built for buyers.
            </p>
            <button onClick={() => setPage('content.about')} className="mt-4 inline-flex items-center gap-1 text-[12px] font-medium text-ink dark:text-white hover:text-amber-brand dark:hover:text-amber-warm">
              About SpecEagle <IconArrowRight size={11} />
            </button>
          </div>
          {cols.map((c) => (
            <div key={c.h}>
              <h4 className="text-[11px] font-semibold uppercase tracking-[0.12em] text-ink dark:text-white">{c.h}</h4>
              <ul className="mt-3 space-y-2">
                {c.links.map((l) => (
                  <li key={l.label}>
                    <button onClick={() => setPage(l.to)} className="text-[13px] text-ink-soft hover:text-ink dark:text-d-muted dark:hover:text-white text-left">{l.label}</button>
                  </li>
                ))}
              </ul>
            </div>
          ))}
        </div>

        {/* Language matrix — all 30 languages */}
        <div className="mt-12 pt-8 border-t border-line dark:border-d-border">
          <div className="flex items-center justify-between gap-3 mb-3 flex-wrap">
            <div className="flex items-center gap-2">
              <IconGlobe size={14} className="text-ink-soft dark:text-d-muted" />
              <span className="text-[11px] font-mono uppercase tracking-wider text-ink-soft dark:text-d-muted">
                {t('lang.allLanguages')} · <span className="num text-ink dark:text-white">{LANGUAGES.length}</span> active
              </span>
            </div>
            <button onClick={onOpenLang} className="inline-flex items-center gap-1 text-[11px] font-mono uppercase tracking-wider text-ink dark:text-white hover:text-amber-brand dark:hover:text-amber-warm">
              Choose language <IconArrowRight size={11} />
            </button>
          </div>
          <div className="flex flex-wrap gap-1.5">
            {LANGUAGES.map((l) => {
              const active = lang === l.code;
              return (
                <button
                  key={l.code}
                  onClick={onOpenLang}
                  title={`${l.native} (${l.name}) · ${l.coverage}% translated`}
                  className={`px-2.5 py-1 rounded text-[11px] font-mono ${
                    active
                      ? 'bg-ink text-white dark:bg-white dark:text-ink'
                      : 'bg-paper-soft dark:bg-d-surface text-ink-soft dark:text-d-muted hover:text-ink dark:hover:text-white border border-line dark:border-d-border'
                  }`}
                >
                  {l.code.toUpperCase()}
                </button>
              );
            })}
          </div>
        </div>

        {/* Social + trust */}
        <div className="mt-12 pt-8 border-t border-line dark:border-d-border flex flex-col-reverse md:flex-row md:items-end md:justify-between gap-8">
          <div className="max-w-2xl">
            <p className="text-[11px] leading-relaxed text-ink-soft dark:text-d-muted">
              SpecEagle is an independent publication. We may earn affiliate commission from purchases via our links. <span className="text-ink dark:text-white font-medium">We never accept payment for verdicts.</span>
            </p>
            <div className="mt-4 flex items-center gap-4 text-[11px] font-mono text-ink-soft dark:text-d-muted">
              <span className="flex items-center gap-1.5"><EagleMark size={14} className="text-amber-brand dark:text-amber-warm" /> © 2026 SpecEagle</span>
              <button onClick={() => setPage('content.privacy')} className="hover:text-ink dark:hover:text-white">Privacy</button>
              <button onClick={() => setPage('content.terms')} className="hover:text-ink dark:hover:text-white">Terms</button>
              <button onClick={() => setPage('content.cookies')} className="hover:text-ink dark:hover:text-white">Cookies</button>
            </div>
          </div>
          <div className="flex items-center gap-3">
            <a href="#" onClick={(e) => e.preventDefault()} className="flex items-center gap-2 px-3 py-2 rounded-lg border border-line dark:border-d-border bg-paper-soft dark:bg-d-surface text-[13px] font-medium text-ink dark:text-white hover:border-amber-brand dark:hover:border-amber-warm transition">
              <span className="text-amber-brand dark:text-amber-warm"><IconYouTube size={16} /></span>
              YouTube
              <span className="ml-1 px-1.5 py-0.5 rounded text-[10px] font-mono bg-paper dark:bg-d-bg text-ink-soft dark:text-d-muted border border-line dark:border-d-border">2.1M</span>
            </a>
            <a href="#" onClick={(e) => e.preventDefault()} aria-label="TikTok" className="p-2 rounded-lg border border-line dark:border-d-border bg-paper-soft dark:bg-d-surface text-ink-soft dark:text-d-muted hover:text-ink dark:hover:text-white"><IconTikTok size={16} /></a>
            <a href="#" onClick={(e) => e.preventDefault()} aria-label="Instagram" className="p-2 rounded-lg border border-line dark:border-d-border bg-paper-soft dark:bg-d-surface text-ink-soft dark:text-d-muted hover:text-ink dark:hover:text-white"><IconInstagram size={16} /></a>
            <a href="#" onClick={(e) => e.preventDefault()} aria-label="X" className="p-2 rounded-lg border border-line dark:border-d-border bg-paper-soft dark:bg-d-surface text-ink-soft dark:text-d-muted hover:text-ink dark:hover:text-white"><IconXSocial size={16} /></a>
          </div>
        </div>
      </div>
    </footer>
  );
};

/* ---- PhoneRender placeholder ----
 Captioned striped box — explicit "render placeholder" per brief.
 Optional tint with brand color.
 */
const PhoneRender = ({ label, size = 'md', tint = 'neutral' }) => {
  const sizes = {
    xs: 'h-14 w-10',
    sm: 'h-20 w-14',
    md: 'h-44 w-28',
    lg: 'h-72 w-44',
    xl: 'h-[360px] w-56',
  };
  const tints = {
    neutral: 'bg-paper-soft dark:bg-d-surface',
    amber: 'bg-amber-brand/[0.06] dark:bg-amber-warm/[0.06]',
    navy: 'bg-navy/[0.06] dark:bg-white/[0.04]',
  };
  return (
    <div className="flex flex-col items-center gap-2">
      <div className={`relative rounded-[18%/9%] border border-line dark:border-d-border ${sizes[size]} ${tints[tint]} render-stripe overflow-hidden`}>
        {/* camera bar */}
        <div className="absolute top-2 left-1/2 -translate-x-1/2 h-1 w-6 rounded-full bg-ink/15 dark:bg-white/15" />
        {/* screen */}
        <div className="absolute inset-2 rounded-[12%/6%] border border-dashed border-ink/15 dark:border-white/15" />
      </div>
      {label && (
        <div className="text-[10px] font-mono uppercase tracking-wider text-ink-soft/70 dark:text-d-muted/70 max-w-[12rem] text-center">
          {label}
        </div>
      )}
    </div>
  );
};

/* ---- BrandLogo placeholder (stylized monospace marks) ---- */
const BrandLogo = ({ name, onClick }) => {
  // Just render the brand name in mono — monochrome — per "logos in monochrome, colorize on hover".
  // We tint on hover via a simple class swap.
  return (
    <button onClick={onClick} className="group flex items-center justify-center h-16 rounded-xl border border-line dark:border-d-border bg-paper dark:bg-d-bg hover:border-amber-brand/40 dark:hover:border-amber-warm/40 transition w-full">
      <span className="font-display font-semibold tracking-tighter2 text-ink-soft dark:text-d-muted group-hover:text-ink dark:group-hover:text-white text-[15px]">
        {name}
      </span>
    </button>
  );
};

Object.assign(window, {
  Wordmark, useTheme, Chip, Header, StickyCTA, Footer, PhoneRender, BrandLogo,
});
