// iffs-components.jsx — shared UI: Nav, CTA band, footer, hero, etc.

const { useState, useRef, useEffect } = React;

function Announce({ copy }) {
  return (
    <div className="announce">
      <span className="dot"></span>
      <span>{copy.pre}</span>
      <span className="sep">·</span>
      <span>{copy.msg}</span>
      <span className="sep">·</span>
      <a href="#contact">{copy.cta} →</a>
    </div>
  );
}

function Nav({ copy, page, onPage, lang, onLang, emblem }) {
  const [loginOpen, setLoginOpen] = useState(false);
  const popRef = useRef(null);
  useEffect(() => {
    function onDoc(e){ if (popRef.current && !popRef.current.contains(e.target)) setLoginOpen(false); }
    if (loginOpen) document.addEventListener('mousedown', onDoc);
    return () => document.removeEventListener('mousedown', onDoc);
  }, [loginOpen]);

  return (
    <header className="nav" data-screen-label="Nav">
      <a href="#" onClick={(e)=>{e.preventDefault(); onPage('home');}}>
        <Logo variant={emblem} size="md"/>
      </a>
      <nav className="nav-links">
        {copy.nav.links.map(l => (
          <a key={l.id} href={`#${l.id}`}
             className={page === l.id ? 'active' : ''}
             onClick={(e)=>{e.preventDefault(); onPage(l.id);}}>{l.label}</a>
        ))}
      </nav>
      <div className="nav-cta" style={{ position: 'relative' }}>
        <div className="lang-switch">
          <button className={lang==='is'?'on':''} onClick={()=>onLang('is')}>IS</button>
          <button className={lang==='en'?'on':''} onClick={()=>onLang('en')}>EN</button>
        </div>
        <button className="btn btn-ghost" onClick={()=>setLoginOpen(o=>!o)}>{copy.nav.login}</button>
        <button className="btn btn-primary" onClick={()=>onPage('contact')}>
          {copy.nav.cta}
          <span className="arr">→</span>
        </button>
        {loginOpen && (
          <div className="login-pop" ref={popRef}>
            {/* Both rows are anchors so the whole row is clickable, not
                just a phantom hover area. The descriptive paths shown in
                the copy (iffs.is/{áin}, iffs.is/staff) are brand-pattern
                explanations — actual clicks resolve via the
                Cloudflare _redirects rules into the right subdomain
                (rm.iffs.is for operators, admin.iffs.is for IFFS staff). */}
            <a className="row" href="https://rm.iffs.is/login" style={{ display: 'flex', textDecoration: 'none' }}>
              <div className="ico"><Icon name="map" size={28}/></div>
              <div>
                <h6>{lang==='is' ? 'Mínar síður' : 'Operator'}</h6>
                <p>{lang==='is' ? 'Innskráning fyrir leigutaka og veiðifélög — iffs.is/{áin}' : 'Sign in for leaseholders and clubs — iffs.is/{river}'}</p>
              </div>
            </a>
            <a className="row" href="https://admin.iffs.is/login" style={{ display: 'flex', textDecoration: 'none' }}>
              <div className="ico"><Icon name="people" size={28}/></div>
              <div>
                <h6>{lang==='is' ? 'Starfsfólk IFFS' : 'IFFS staff'}</h6>
                <p>{lang==='is' ? 'Starfsmannainnskráning · iffs.is/staff' : 'Staff sign-in · iffs.is/staff'}</p>
              </div>
            </a>
          </div>
        )}
      </div>
    </header>
  );
}

function SecHead({ data }) {
  return (
    <div className="sec-hd">
      <div className="num">{data.num}</div>
      <h2 style={{ whiteSpace: 'pre-line' }}>{data.title}</h2>
      <div className="lead">{data.lead}</div>
    </div>
  );
}

function CTABand({ copy }) {
  return (
    <section className="cta-band" data-screen-label="CTA band">
      <img src="img/cta-sunset.jpg" alt="" className="cta-band-img"/>
      <div className="container">
        <div className="cta-grid">
          <div>
            <div className="kicker" style={{ color: 'rgba(244,239,228,.6)' }}>{copy.cta.kicker}</div>
            <h2 style={{ marginTop: 18 }}>
              {copy.cta.title[0]}<br/>
              <span className="display-italic">{copy.cta.title[1]}</span>
            </h2>
            <p className="lead">{copy.cta.sub}</p>
          </div>
          <div className="ctas">
            <button className="btn btn-onDark-primary btn-lg">{copy.cta.primary} <span className="arr">→</span></button>
            <button className="btn btn-onDark-ghost btn-lg">{copy.cta.ghost}</button>
          </div>
        </div>
      </div>
    </section>
  );
}

function Footer({ copy, emblem }) {
  return (
    <footer className="footer" data-screen-label="Footer">
      <div className="container">
        <div className="footer-grid">
          <div>
            <div style={{ marginBottom: 14 }}>
              <div style={{ fontFamily:'var(--font-display)', fontSize: 22, fontWeight: 460, color: 'var(--paper)' }}>IFFS</div>
              <div style={{ fontFamily:'var(--font-mono)', fontSize: 9.5, letterSpacing:'.16em', textTransform:'uppercase', color:'rgba(244,239,228,.55)', marginTop: 2 }}>Icelandic Fly Fishing Solutions</div>
            </div>
            <p style={{ maxWidth: 360 }}>{copy.footer.tagline}</p>
          </div>
          {copy.footer.cols.map(c => (
            <div key={c.t}>
              <h5>{c.t}</h5>
              <ul>{c.items.map(i => <li key={i}><a href="#">{i}</a></li>)}</ul>
            </div>
          ))}
        </div>
        <div className="footer-bot">
          <span>{copy.footer.legal}</span>
          <span>{copy.footer.meta}</span>
        </div>
      </div>
    </footer>
  );
}

// ─── Hero (used on home) ────────────────────────────────────────────────
function Hero({ copy, emblem, onPage }) {
  return (
    <section className="hero container" data-screen-label="Hero">
      <div className="hero-grid">
        <div>
          <span className="badge"><span className="dot"></span>{copy.hero.badge}</span>
          <h1>
            {copy.hero.title[0]}<br/>
            <span className="display-italic">{copy.hero.title[1]}</span>
          </h1>
          <p className="hero-sub">{copy.hero.sub}</p>
          <div className="hero-ctas">
            <button className="btn btn-primary btn-lg" onClick={()=>onPage('contact')}>
              {copy.hero.cta} <span className="arr">→</span>
            </button>
            <button className="btn btn-quiet btn-lg" onClick={()=>onPage('rm')}>
              {copy.hero.ghost}
            </button>
          </div>
          <div className="hero-cta-sub" style={{ marginTop: 14 }}>{copy.hero.ctaSub}</div>
        </div>
        <HeroArt emblem={emblem} stamp={copy.hero.stamp}/>
      </div>
      <div className="hero-meta-strip">
        {copy.hero.meta.map((m, i) => <span key={i}>{m}</span>)}
      </div>
    </section>
  );
}

function HeroArt({ emblem, stamp }) {
  return (
    <div className="hero-art">
      <img src="img/aa-sunburst.jpg" alt="" className="hero-art-img"/>
      <div className="hero-art-shade"/>
      <div className="grain"/>
      <div className="hero-art-meta">
        <span className="stamp">{stamp[0]}</span>
        <span>{stamp[1]}</span>
      </div>
    </div>
  );
}

// ─── Values grid ────────────────────────────────────────────────────────
function Values({ copy }) {
  const icons = ['cal', 'fish', 'doc', 'pin', 'bell', 'crm'];
  return (
    <div className="values">
      {copy.values.map((v, i) => (
        <div className="value-card" key={v.num}>
          <div className="num">{v.num}</div>
          <div className="ico"><Icon name={icons[i]} size={36}/></div>
          <h3>{v.title}</h3>
          <p>{v.desc}</p>
        </div>
      ))}
    </div>
  );
}

// ─── Product cards (RM + AA preview) ───────────────────────────────────
function ProductCards({ copy, onPage, rmMark, aaMark }) {
  return (
    <div className="products">
      {copy.products.map((p) => (
        <div className="product-card" key={p.id}>
          <div className="product-screen" style={{ position: 'relative' }}>
            {p.id === 'rm' ? <RMShot/> : <AAShot/>}
          </div>
          <div className="product-body">
            <div className="row">
              <div>
                <div className="label">{p.kicker}</div>
                <h3 style={{ marginTop: 6 }}>{p.name}</h3>
              </div>
            </div>
            <p>{p.desc}</p>
            <ul>
              {p.bullets.map(b => <li key={b}>{b}</li>)}
            </ul>
          </div>
          <div className="footer">
            <span style={{ fontFamily:'var(--font-mono)', fontSize: 10.5, letterSpacing:'.14em', textTransform:'uppercase', color:'var(--ink-4)' }}>iffs.is/{p.id}</span>
            <a href="#" onClick={(e)=>{e.preventDefault(); onPage(p.id);}}>{p.link} <span>→</span></a>
          </div>
        </div>
      ))}
    </div>
  );
}

// ─── Founder note ──────────────────────────────────────────────────────
function Founder({ copy }) {
  return (
    <div className="founder">
      <div className="founder-portrait">
        <img src="img/founder-salmon.jpg" alt=""/>
        <div className="founder-shade"/>
        <div className="label">Portrett · Stofnandi · Bakkapyttur 2019</div>
      </div>
      <div className="founder-content">
        <span className="eyebrow">{copy.founder.eyebrow}</span>
        <p className="quote">{copy.founder.quote}</p>
        {copy.founder.paras.map((p, i) => <p key={i}>{p}</p>)}
        <div className="founder-sig">
          <span className="name">{copy.founder.sigName}</span>
          <span className="role">{copy.founder.sigRole}</span>
        </div>
      </div>
    </div>
  );
}

// ─── RM Console placeholder (in product card screen) ───────────────────
function RMShot() {
  return (
    <div className="rm-shot">
      <div className="topbar">
        <span>iffs.is/laxa-i-kjos · console</span>
        <span>Vertíð 2026</span>
      </div>
      <div className="body">
        <div className="side">
          <div className="it on">▦ Yfirlit</div>
          <div className="it">◷ Bókanir</div>
          <div className="it">⚓ Veiðiskráning</div>
          <div className="it">≣ Gestir</div>
          <div className="it">⌖ VMST-skýrsla</div>
        </div>
        <div className="main">
          <div className="row" style={{ justifyContent:'space-between' }}>
            <span style={{ fontFamily:'var(--font-display)', fontSize: 16 }}>Bókanir · Júlí</span>
            <span style={{ color:'var(--copper)', fontFamily:'var(--font-mono)', fontSize: 10 }}>● 14 nýjar</span>
          </div>
          <div className="cal">
            {['', 'M','Þ','M','F','F','L','S'].map((d,i) => <div key={'h'+i} className="cell h">{d}</div>)}
            {[1,2,3,4].map(w => (
              <React.Fragment key={w}>
                <div className="cell h">v.{w+26}</div>
                {Array.from({length:7}).map((_,i) => {
                  const r = (w*3 + i) % 5;
                  const cls = r === 0 ? 'cell b' : r === 2 ? 'cell b2' : 'cell';
                  const txt = r === 0 ? '2 stangir' : r === 2 ? '4 stangir' : '';
                  return <div key={i} className={cls}>{txt}</div>;
                })}
              </React.Fragment>
            ))}
          </div>
        </div>
      </div>
    </div>
  );
}

// ─── AA app placeholder ────────────────────────────────────────────────
function AAShot({ riverName = 'Laxá í Kjós' }) {
  return (
    <div className="aa-shot">
      <div className="h">
        <div>
          <div style={{ fontFamily:'var(--font-mono)', fontSize: 9, letterSpacing:'.14em', textTransform:'uppercase', color:'var(--ink-4)' }}>Áin</div>
          <div className="ttl">{riverName}</div>
        </div>
        <div style={{ fontFamily:'var(--font-mono)', fontSize: 10, color:'var(--moss)' }}>● Offline</div>
      </div>
      <div className="map">
        <svg viewBox="0 0 320 280" preserveAspectRatio="xMidYMid slice">
          <path d="M40 -10 C 50 60, 90 80, 110 130 C 130 180, 170 200, 220 230 C 260 250, 280 270, 320 280"
                fill="none" stroke="rgba(44,93,110,.55)" strokeWidth="14" strokeLinecap="round"/>
          <path d="M40 -10 C 50 60, 90 80, 110 130 C 130 180, 170 200, 220 230 C 260 250, 280 270, 320 280"
                fill="none" stroke="rgba(255,255,255,.6)" strokeWidth="3" strokeLinecap="round"/>
          {/* contour lines */}
          {[0,1,2,3,4].map(i => (
            <path key={i} d={`M0 ${40+i*40} Q 100 ${20+i*40} 200 ${50+i*40} T 320 ${30+i*40}`}
                  fill="none" stroke="rgba(26,20,16,.1)" strokeWidth=".5"/>
          ))}
        </svg>
        <div className="pin" style={{ top: '30%', left: '28%' }}/>
        <div className="pin" style={{ top: '52%', left: '38%', background:'var(--copper)' }}/>
        <div className="pin" style={{ top: '72%', left: '62%' }}/>
      </div>
      <div className="panel">
        <div style={{ display:'flex', justifyContent:'space-between', alignItems:'baseline' }}>
          <span className="t">Bakkapyttur · Beat 4</span>
          <span style={{ fontFamily:'var(--font-mono)', fontSize: 10, color:'var(--copper)' }}>VIRK</span>
        </div>
        <div className="row"><span>Vatnsstaða</span><span>1.18 m</span></div>
        <div className="row"><span>Hiti</span><span>9.4°C</span></div>
        <div className="row"><span>Tillaga</span><span>Sunray Shadow #14</span></div>
      </div>
    </div>
  );
}

Object.assign(window, {
  Announce, Nav, SecHead, CTABand, Footer,
  Hero, HeroArt, Values, ProductCards, Founder,
  RMShot, AAShot,
});
