const { useState: useStateU, useEffect: useEffectU } = React;

function AdapterIllus({ adapter }) {
  const c = adapter.svgAccent;
  if (adapter.kind === "cable") {
    return (
      <svg viewBox="0 0 320 240" style={{position:"absolute",inset:0,width:"100%",height:"100%"}}>
        <g transform="translate(34, 90)">
          <rect x="0" y="0" width="64" height="56" rx="4" fill="var(--bg-3)" stroke={c} strokeWidth="1.5"/>
          <rect x="6" y="6" width="52" height="18" rx="2" fill="var(--bg-2)"/>
          {[...Array(8)].map((_,i)=> <rect key={i} x={8+i*6} y={9} width={3} height={12} fill={c} opacity=".7"/>)}
          <rect x="6" y="32" width="52" height="14" rx="2" fill="var(--bg-2)"/>
          {[...Array(8)].map((_,i)=> <rect key={i} x={8+i*6} y={35} width={3} height={8} fill={c} opacity=".5"/>)}
          <text x="32" y="-8" fontSize="9" textAnchor="middle" fill="var(--fg-dim)" fontFamily="JetBrains Mono">OBD-II</text>
        </g>
        <path d="M98 118 Q 160 80 222 118" stroke={c} strokeWidth="5" fill="none" strokeLinecap="round" opacity=".85"/>
        <g transform="translate(222, 90)">
          <path d="M0 8 L 12 0 L 52 0 L 64 8 L 64 48 L 0 48 Z" fill="var(--bg-3)" stroke={c} strokeWidth="1.5"/>
          <rect x="10" y="14" width="44" height="26" rx="1" fill="var(--bg-2)"/>
          {[...Array(8)].map((_,i)=> <rect key={i} x={12+i*5} y={18} width={3} height={16} fill={c} opacity=".7"/>)}
          <text x="32" y="-8" fontSize="9" textAnchor="middle" fill="var(--fg-dim)" fontFamily="JetBrains Mono">RJ45</text>
        </g>
        <text x="160" y="200" fontSize="10" textAnchor="middle" fill="var(--fg-mute)" fontFamily="JetBrains Mono" letterSpacing=".1em">{adapter.protocol.toUpperCase()}</text>
      </svg>
    );
  }
  const hasWifi = adapter.connection === "wifi";
  const hasBt = adapter.connection === "bt" || adapter.connection === "ble";
  return (
    <svg viewBox="0 0 320 240" style={{position:"absolute",inset:0,width:"100%",height:"100%"}}>
      <g transform="translate(100, 60)">
        <rect x="0" y="40" width="120" height="90" rx="10" fill="var(--bg-3)" stroke={c} strokeWidth="1.5"/>
        <rect x="8" y="48" width="104" height="40" rx="4" fill="var(--bg-2)" stroke="var(--line-2)" strokeWidth="1"/>
        <text x="60" y="72" fontSize="12" textAnchor="middle" fill={c} fontFamily="Space Grotesk" fontWeight="600">{adapter.name.split(" ")[0].toUpperCase()}</text>
        <circle cx="18" cy="102" r="4" fill={c}><animate attributeName="opacity" values="0.3;1;0.3" dur="2s" repeatCount="indefinite"/></circle>
        <circle cx="34" cy="102" r="4" fill="var(--line-2)"/>
        <circle cx="50" cy="102" r="4" fill="var(--line-2)"/>
        <text x="72" y="106" fontSize="9" fill="var(--fg-mute)" fontFamily="JetBrains Mono">READY</text>
        <rect x="30" y="0" width="60" height="40" rx="2" fill="var(--bg-3)" stroke={c} strokeWidth="1"/>
        {[...Array(8)].map((_,i)=> <rect key={i} x={33+i*7} y={8} width={3} height={10} fill={c} opacity=".7"/>)}
        {[...Array(8)].map((_,i)=> <rect key={i} x={33+i*7} y={22} width={3} height={10} fill={c} opacity=".5"/>)}
      </g>
      {(hasWifi || hasBt) && (
        <g transform="translate(230, 70)">
          {hasWifi && <>
            <path d="M0 30 Q 15 18 30 30" stroke={c} strokeWidth="2" fill="none" opacity=".8"/>
            <path d="M-6 36 Q 15 10 36 36" stroke={c} strokeWidth="2" fill="none" opacity=".5"/>
            <path d="M-12 42 Q 15 2 42 42" stroke={c} strokeWidth="2" fill="none" opacity=".25"/>
            <circle cx="15" cy="34" r="2.5" fill={c}/>
          </>}
          {hasBt && <>
            <path d="M15 10 L 15 30 M10 14 L 22 26 M10 26 L 22 14 M15 10 L 22 18 L 15 26" stroke={c} strokeWidth="2" fill="none" strokeLinejoin="round"/>
            <circle cx="15" cy="18" r="18" stroke={c} strokeWidth="1" fill="none" opacity=".3"/>
            <circle cx="15" cy="18" r="28" stroke={c} strokeWidth="1" fill="none" opacity=".15"/>
          </>}
        </g>
      )}
      <text x="160" y="200" fontSize="10" textAnchor="middle" fill="var(--fg-mute)" fontFamily="JetBrains Mono" letterSpacing=".1em">{adapter.protocol.toUpperCase()}</text>
    </svg>
  );
}

function AdaptLogo({ size = 40 }) {
  return (<a href="/" style={{display:"flex",alignItems:"center",gap:10}}>
    <img src="/assets/obdthink-logo.png" alt="OBDThink" width={size} height={size} style={{height:size,width:size,display:"block",borderRadius:size*0.22}}/>
  </a>);
}

function AdaptNav({ t, lang, setLang }) {
  const [menuOpen, setMenuOpen] = useStateU(false);
  const links = Object.entries(t.nav).filter(([k]) => k !== "download").map(([k,v]) => {
    const href = k === "adapters" ? `/${lang}/adapters` : k === "faq" ? `/${lang}/faq` : k === "blog" ? `/${lang}/blog` : `/#${k}`;
    return { k, v, href, active: k === "adapters" };
  });
  return (<nav className="site-nav" style={{position:"sticky",top:0,zIndex:100,background:"color-mix(in oklab, var(--bg) 80%, transparent)",backdropFilter:"blur(16px)",borderBottom:"1px solid var(--line)"}}>
    <div className="container site-nav-row" style={{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"18px 28px"}}>
      <div className="site-nav-left" style={{display:"flex",alignItems:"center",gap:40}}>
        <AdaptLogo />
        <div className="site-nav-links" style={{display:"flex",gap:28}}>
          {links.map(({k,v,href,active}) => (<a key={k} href={href} style={{fontSize:13,color:active?"var(--fg)":"var(--fg-dim)",fontWeight:active?600:500}}>{v}</a>))}
        </div>
      </div>
      <div className="site-nav-right" style={{display:"flex",alignItems:"center",gap:10}}>
        <LanguageMenu lang={lang} setLang={setLang}/>
        <a href="/#download" className="btn btn-primary site-nav-cta" style={{padding:"10px 16px",fontSize:13}}>{t.nav.download} <AdapterIcons.Arrow size={14}/></a>
        <button className="site-nav-hamburger" aria-label="menu" aria-expanded={menuOpen} onClick={() => setMenuOpen(o => !o)}>
          <span style={{transform: menuOpen ? "translateY(6px) rotate(45deg)" : "none"}}/>
          <span style={{opacity: menuOpen ? 0 : 1}}/>
          <span style={{transform: menuOpen ? "translateY(-6px) rotate(-45deg)" : "none"}}/>
        </button>
      </div>
    </div>
    {menuOpen && (
      <div className="site-nav-mobile-panel">
        {links.map(({k,v,href,active}) => (<a key={k} href={href} style={{color: active ? "var(--accent)" : undefined}} onClick={() => setMenuOpen(false)}>{v}</a>))}
        <a href="/#download" className="btn btn-primary" style={{justifyContent:"center"}} onClick={() => setMenuOpen(false)}>{t.nav.download} <AdapterIcons.Arrow size={14}/></a>
      </div>
    )}
  </nav>);
}

function AdaptHero({ t }) {
  return (<section className="carbon-bg" style={{position:"relative",padding:"100px 0 72px",overflow:"hidden"}}>
    <div className="container" style={{position:"relative"}}>
      <div style={{maxWidth:820}}>
        <div className="eyebrow" style={{marginBottom:24}}><span className="dot"/> {t.hero.eyebrow}</div>
        <h1 className="display" style={{fontSize:"clamp(48px, 7vw, 92px)",lineHeight:0.98,margin:0,fontWeight:600}}>
          {t.hero.title1}<br/><span style={{color:"var(--accent)"}}>{t.hero.title2}</span>
        </h1>
        <p style={{fontSize:19,color:"var(--fg-dim)",lineHeight:1.5,marginTop:28,maxWidth:680}}>{t.hero.sub}</p>
        <div style={{marginTop:28,display:"flex",alignItems:"center",gap:10,color:"var(--fg-mute)",fontSize:13}}>
          <AdapterIcons.Info size={16}/><span>{t.hero.note}</span>
        </div>
      </div>
    </div>
  </section>);
}

function FilterBar({ t, filter, setFilter, counts }) {
  const options = [{id:"all",label:t.legend.all},{id:"bt",label:t.legend.bt},{id:"wifi",label:t.legend.wifi},{id:"ble",label:t.legend.ble},{id:"cable",label:t.legend.cable}];
  return (<div className="container" style={{padding:"32px 28px 20px"}}>
    <div style={{display:"flex",gap:10,flexWrap:"wrap",alignItems:"center"}}>
      {options.map(o => (<button key={o.id} className={`filter-chip ${filter===o.id?"active":""}`} onClick={() => setFilter(o.id)}>
        {o.label} <span style={{opacity:.6,marginLeft:6}}>· {counts[o.id]}</span>
      </button>))}
    </div>
  </div>);
}

function SupportCell({ value, t }) {
  const map = { yes:{icon:<AdapterIcons.Check size={13}/>,color:"var(--ok)",label:t.labels.yes}, partial:{icon:"~",color:"var(--warn)",label:t.labels.partial}, no:{icon:<AdapterIcons.X size={13}/>,color:"var(--fg-mute)",label:t.labels.no} };
  const s = map[value];
  return (<span style={{display:"inline-flex",alignItems:"center",gap:6,color:s.color,fontSize:12,fontFamily:"'JetBrains Mono', monospace"}}>
    <span style={{width:16,height:16,borderRadius:4,border:`1px solid ${s.color}`,display:"inline-flex",alignItems:"center",justifyContent:"center",fontSize:10,fontWeight:700}}>{s.icon}</span>
    {s.label}
  </span>);
}

function ConnBadge({ type, t }) {
  const m = { bt:{icon:<AdapterIcons.Bluetooth size={13}/>,label:t.legend.bt}, ble:{icon:<AdapterIcons.Bluetooth size={13}/>,label:"BLE"}, wifi:{icon:<AdapterIcons.Wifi size={13}/>,label:t.legend.wifi}, cable:{icon:<AdapterIcons.Cable size={13}/>,label:t.legend.cable} };
  const s = m[type];
  return (<span className="stat-badge" style={{color:"var(--fg)",background:"var(--bg-3)",borderColor:"var(--line-2)"}}>{s.icon} {s.label}</span>);
}

function AdapterCard({ adapter, t, lang }) {
  const tagLabel = { recommended:t.labels.recommended, best:t.labels.best, essential:t.labels.essential }[adapter.tag];
  const summary = lang === "tr" ? adapter.summaryTr : (adapter.summary?.[lang] || adapter.summaryEn);
  return (<article className="adapter-card">
    <div className="illus">
      {adapter.image ? (
        <img src={adapter.image} alt={adapter.name} style={{position:"absolute",inset:0,width:"100%",height:"100%",objectFit:"contain",padding:"22px",zIndex:1}}/>
      ) : (<AdapterIllus adapter={adapter}/>)}
      {tagLabel && (<div style={{position:"absolute",top:14,left:14,zIndex:3,padding:"5px 10px",borderRadius:6,fontSize:10,fontFamily:"'JetBrains Mono', monospace",letterSpacing:".12em",background:"var(--accent)",color:"#1a0800",fontWeight:700}}>{tagLabel}</div>)}
      <div style={{position:"absolute",top:14,right:14,zIndex:3,display:"flex",alignItems:"center",gap:4,padding:"5px 9px",borderRadius:6,fontSize:11,fontFamily:"'JetBrains Mono', monospace",background:"color-mix(in oklab, var(--bg) 80%, transparent)",backdropFilter:"blur(4px)",border:"1px solid var(--line-2)",color:"var(--warn)"}}>
        <AdapterIcons.Star size={11} filled/> {adapter.rating}
      </div>
      <div style={{position:"absolute",bottom:12,left:14,right:14,zIndex:3,fontSize:9.5,color:"var(--fg-mute)",fontFamily:"'JetBrains Mono', monospace",letterSpacing:".08em",textTransform:"uppercase"}}>{adapter.protocol}</div>
    </div>
    <div style={{padding:"22px 22px 24px",display:"flex",flexDirection:"column",gap:14,flex:1}}>
      <div>
        <h3 className="display" style={{margin:0,fontSize:20,fontWeight:600,marginBottom:4}}>{adapter.name}</h3>
        <div style={{fontSize:12,color:"var(--fg-mute)",fontFamily:"'JetBrains Mono', monospace"}}>{adapter.series}</div>
      </div>
      <p style={{margin:0,fontSize:13.5,color:"var(--fg-dim)",lineHeight:1.55}}>{summary}</p>
      <div style={{display:"flex",gap:6,flexWrap:"wrap"}}>
        <ConnBadge type={adapter.connection} t={t}/>
        {adapter.platforms.map(p => (<span key={p} className="stat-badge muted">{p}</span>))}
      </div>
      <div style={{display:"grid",gridTemplateColumns:"auto 1fr",gap:"6px 14px",padding:"14px 0",borderTop:"1px solid var(--line)",marginTop:"auto"}}>
        <span style={{fontSize:11,color:"var(--fg-mute)",fontFamily:"'JetBrains Mono', monospace",letterSpacing:".08em"}}>{t.labels.coding.toUpperCase()}</span>
        <SupportCell value={adapter.coding} t={t}/>
        <span style={{fontSize:11,color:"var(--fg-mute)",fontFamily:"'JetBrains Mono', monospace",letterSpacing:".08em"}}>{t.labels.diag.toUpperCase()}</span>
        <SupportCell value={adapter.diag} t={t}/>
        <span style={{fontSize:11,color:"var(--fg-mute)",fontFamily:"'JetBrains Mono', monospace",letterSpacing:".08em"}}>{t.labels.live.toUpperCase()}</span>
        <SupportCell value={adapter.live} t={t}/>
      </div>
      <div>
        <div style={{fontSize:11,color:"var(--fg-mute)",fontFamily:"'JetBrains Mono', monospace",letterSpacing:".08em"}}>{t.labels.estPrice}</div>
        <div className="mono" style={{fontSize:15,color:"var(--fg)",fontWeight:600,marginTop:2}}>{adapter.priceRange}</div>
      </div>
    </div>
  </article>);
}

function AdapterGrid({ t, lang, filter }) {
  const filtered = ADAPTERS.filter(a => filter === "all" ? true : a.connection === filter);
  return (<section className="container" style={{padding:"12px 28px 72px"}}>
    <div style={{display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(340px, 1fr))",gap:22}}>
      {filtered.map(a => <AdapterCard key={a.id} adapter={a} t={t} lang={lang}/>)}
    </div>
  </section>);
}

function FitGuide({ t }) {
  return (<section style={{padding:"100px 0",borderTop:"1px solid var(--line)",background:"var(--bg-2)"}}>
    <div className="container">
      <div style={{maxWidth:720,marginBottom:56}}>
        <div className="eyebrow" style={{marginBottom:20}}><span className="dot"/>{t.fit.eyebrow}</div>
        <h2 className="display" style={{fontSize:"clamp(36px, 5vw, 58px)",margin:0,lineHeight:1.02,fontWeight:600}}>{t.fit.title}</h2>
        <p style={{fontSize:18,color:"var(--fg-dim)",marginTop:18,lineHeight:1.5}}>{t.fit.sub}</p>
      </div>
      <div style={{display:"grid",gridTemplateColumns:"repeat(3, 1fr)",gap:18}}>
        {t.fit.cards.map((c,i) => (<div key={i} style={{background:"var(--bg)",border:"1px solid var(--line)",borderRadius:16,padding:28,display:"flex",flexDirection:"column",gap:16,position:"relative",overflow:"hidden"}}>
          <div style={{position:"absolute",top:0,right:0,width:140,height:140,background:`radial-gradient(circle at top right, color-mix(in oklab, var(--accent) ${i===1?18:10}%, transparent), transparent 70%)`}}/>
          <div style={{fontFamily:"'JetBrains Mono', monospace",fontSize:11,letterSpacing:".16em",color:"var(--accent)",textTransform:"uppercase",position:"relative"}}>0{i+1} · {c.tag}</div>
          <h3 className="display" style={{margin:0,fontSize:22,fontWeight:600,lineHeight:1.2,position:"relative"}}>{c.title}</h3>
          <div style={{padding:"14px 16px",background:"var(--bg-3)",border:"1px solid var(--line-2)",borderRadius:10,display:"flex",alignItems:"center",justifyContent:"space-between",gap:12,position:"relative"}}>
            <div>
              <div style={{fontSize:11,color:"var(--fg-mute)",fontFamily:"'JetBrains Mono', monospace",letterSpacing:".1em"}}>{t.labels.recommended}</div>
              <div style={{fontWeight:600,fontSize:15,marginTop:2}}>{c.rec}</div>
            </div>
            <div className="mono" style={{fontSize:13,color:"var(--accent)",whiteSpace:"nowrap"}}>{c.price}</div>
          </div>
          <p style={{margin:0,fontSize:14,color:"var(--fg-dim)",lineHeight:1.55,position:"relative"}}>{c.reason}</p>
        </div>))}
      </div>
    </div>
  </section>);
}

function WarningBlock({ t }) {
  return (<section style={{padding:"80px 0",borderTop:"1px solid var(--line)"}}>
    <div className="container">
      <div style={{display:"grid",gridTemplateColumns:"60px 1fr",gap:24,padding:36,border:"1px solid color-mix(in oklab, var(--warn) 30%, var(--line-2))",borderRadius:18,background:"color-mix(in oklab, var(--warn) 5%, var(--bg-2))",position:"relative",overflow:"hidden"}}>
        <div style={{width:48,height:48,borderRadius:10,background:"color-mix(in oklab, var(--warn) 18%, transparent)",border:"1px solid color-mix(in oklab, var(--warn) 40%, transparent)",display:"flex",alignItems:"center",justifyContent:"center",color:"var(--warn)"}}><AdapterIcons.Shield size={22}/></div>
        <div>
          <h3 className="display" style={{margin:0,fontSize:22,fontWeight:600,color:"var(--warn)"}}>{t.warn.title}</h3>
          <p style={{margin:"10px 0 0",fontSize:15,color:"var(--fg-dim)",lineHeight:1.6,maxWidth:820}}>{t.warn.body}</p>
        </div>
      </div>
    </div>
  </section>);
}

function AdaptCTA({ t }) {
  return (<section style={{padding:"100px 0",borderTop:"1px solid var(--line)",textAlign:"center"}}>
    <div className="container">
      <h2 className="display" style={{fontSize:"clamp(36px, 5vw, 56px)",margin:0,fontWeight:600,lineHeight:1.05}}>{t.cta.title}</h2>
      <p style={{fontSize:18,color:"var(--fg-dim)",margin:"18px auto 32px",maxWidth:560,lineHeight:1.5}}>{t.cta.sub}</p>
      <div style={{display:"inline-flex",gap:12}}>
        <a href="/#download" className="btn btn-primary">{t.nav.download} <AdapterIcons.Arrow/></a>
        <a href="/" className="btn btn-ghost">← {t.home}</a>
      </div>
    </div>
  </section>);
}

function AdaptFooter({ t, lang }) {
  return (<footer style={{borderTop:"1px solid var(--line)",padding:"48px 0 32px",background:"var(--bg-2)"}}>
    <div className="container" style={{display:"flex",alignItems:"center",justifyContent:"space-between",flexWrap:"wrap",gap:20}}>
      <div style={{display:"flex",alignItems:"center",gap:16}}>
        <AdaptLogo size={36}/>
        <div style={{fontSize:12,color:"var(--fg-mute)",fontFamily:"'JetBrains Mono', monospace"}}>© {new Date().getFullYear()} OBDThink · {t.legal}</div>
      </div>
      <div style={{display:"flex",gap:24,fontSize:13,color:"var(--fg-dim)",flexWrap:"wrap"}}>
        <a href="/">{t.home}</a>
        <a href={`/${lang}/adapters`} style={{color:"var(--fg)"}}>{t.nav.adapters}</a>
        <a href={`/${lang}/blog`}>{t.nav.blog}</a>
        <a href={`/${lang}/faq`}>{t.nav.faq}</a>
        <a href="/#download">{t.nav.download}</a>
        <a href="/privacy-policy">Privacy</a>
      </div>
    </div>
  </footer>);
}

function AdaptersApp() {
  const [lang, setLang] = useStateU(() => {
    if (typeof window.__INITIAL_LANG__ === "string" && window.__INITIAL_LANG__) return window.__INITIAL_LANG__;
    return typeof readSharedLang === "function" ? readSharedLang() : "tr";
  });
  const [filter, setFilter] = useStateU("all");
  useEffectU(() => { if (typeof writeSharedLang === "function") writeSharedLang(lang); }, [lang]);
  useEffectU(() => { document.documentElement.lang = lang; }, [lang]);
  useEffectU(() => {
    const tt = T_ADAPT[lang]?.metaTitle;
    if (tt) document.title = tt;
  }, [lang]);
  const t = T_ADAPT[lang];
  const counts = {
    all: ADAPTERS.length,
    bt: ADAPTERS.filter(a => a.connection === "bt").length,
    wifi: ADAPTERS.filter(a => a.connection === "wifi").length,
    ble: ADAPTERS.filter(a => a.connection === "ble").length,
    cable: ADAPTERS.filter(a => a.connection === "cable").length,
  };
  return (<>
    <AdaptNav t={t} lang={lang} setLang={setLang}/>
    <AdaptHero t={t}/>
    <FilterBar t={t} filter={filter} setFilter={setFilter} counts={counts}/>
    <AdapterGrid t={t} lang={lang} filter={filter}/>
    <FitGuide t={t}/>
    <WarningBlock t={t}/>
    <AdaptCTA t={t}/>
    <AdaptFooter t={t} lang={lang}/>
  </>);
}

ReactDOM.createRoot(document.getElementById("root")).render(<AdaptersApp/>);
