import React,{useMemo,useState,useContext,createContext}from"react";import{createRoot}from"react-dom/client";import{BrowserRouter,useRoutes,Link,useParams}from"react-router-dom";import{DRUGS}from"./content/drugIndex";import{I18N}from"./content/i18n";import Shell from"./components/Shell";import"./styles.css";
const LocaleContext=createContext("zh-CN");
const pick=(x,l)=>x?.[l]||x?.["zh-CN"]||x?.["en-US"]||x;
function Card({d,l}){return <article className="card"><div className="tag">{d.group}</div><h3>{pick(d.name,l)}</h3><div className="tag-row">{d.tags.map(t=><span className="tiny-tag" key={t}>{t}</span>)}</div><p>{d.summary}</p><Link className="btn alt" to={'/drugs/'+d.slug}>{I18N[l].open}</Link></article>}
function Home({l}){return <><section className="hero"><div><div className="eyebrow">ARKLIGHT PROJECT ORGANIZATION™</div><h1>Medicine,<br/>explained properly.</h1><p>一个面向公众的医学与药物教育知识库。每种药物都有独立目录、分类、标签、药理章节和来源入口，避免把整个项目焊在一张 HTML 页面上。</p><p className="muted">当前版本：{DRUGS.length} 个独立药物条目，五语言界面，全文检索 + 标签检索 + 独立 monograph。</p><div className="hero-actions"><Link className="btn" to="/drugs">进入药物百科</Link><Link className="btn alt" to="/anti-abuse">反药物滥用号召</Link></div></div><div className="art"><img src="/arklight-logo.png"/></div></section><div className="stats"><div className="stat"><b>{DRUGS.length}+</b><span>独立药物专页</span></div><div className="stat"><b>5</b><span>语言界面</span></div><div className="stat"><b>标签</b><span>名称 + 类别 + 途径 + 风险主题</span></div><div className="stat"><b>官方源</b><span>FDA · DailyMed · RxNorm</span></div></div><section className="panel"><div className="eyebrow">FEATURED</div><h2>精选条目</h2><div className="cards">{DRUGS.slice(0,12).map(d=><Card d={d} l={l} key={d.slug}/>)}</div></section></>}
function Drugs({l}){let[q,setQ]=useState("");let[tag,setTag]=useState(I18N[l].all);let tags=[I18N[l].all,...new Set(DRUGS.flatMap(d=>d.tags))];let list=useMemo(()=>{let s=q.trim().toLowerCase();return DRUGS.filter(d=>{let hay=[d.name["en-US"],d.name["zh-CN"],d.name["zh-TW"],d.group,d.class,d.route,...d.tags,...(d.aliases||[])].join(" ").toLowerCase();return (!s||hay.includes(s))&&(tag===I18N[l].all||d.tags.includes(tag));})},[q,tag,l]);return <section className="panel"><div className="eyebrow">{DRUGS.length}+ MONOGRAPHS</div><h1>{I18N[l].drugs}</h1><div className="searchbox"><span>⌕</span><input autoFocus value={q} onChange={e=>setQ(e.target.value)} placeholder={I18N[l].search}/><kbd>⌘ / Ctrl + K</kbd></div><div className="search-meta"><b>{list.length}</b> 个结果 · 可按药物名称、英文通用名、药理分类、给药途径和标签搜索</div><div className="chips">{tags.map(c=><button className={'chip '+(tag===c?'selected':'')} onClick={()=>setTag(c)} key={c}>{c}</button>)}</div><div className="cards">{list.map(d=><Card d={d} l={l} key={d.slug}/>)}</div>{!list.length&&<div className="empty">没有匹配条目。人类终于发明了搜索框，却还是会拼错药名。</div>}</section>}
function Drug({l}){let{slug}=useParams(),d=DRUGS.find(x=>x.slug===slug);if(!d)return <section className="panel">Not found</section>;let sections=[['药理学原理与作用靶点',d.mechanism],['主要临床用途与疾病背景',d.uses],['药代动力学与体内过程',d.pharmacokinetics],['常见不良反应与严重风险',d.adverse],['药物相互作用',d.interactions],['特殊人群',d.special],['监测与随访',d.monitoring],['不同国家/地区监管',d.regional],['患者教育与常见误区',d.myths]];return <><div className="crumb"><Link to="/drugs">{I18N[l].drugs}</Link> / {d.group} / {pick(d.name,l)}</div><section className="mono"><div><div className="eyebrow">{d.group}</div><h1>{pick(d.name,l)}</h1><p className="muted">{d.name["en-US"]} · Monograph #{String(d.id).padStart(3,'0')}</p><div className="tag-row large">{d.tags.map(t=><span className="tiny-tag" key={t}>{t}</span>)}</div></div><aside className="side"><b>Editorial status</b><p>{d.editorial.status}<br/>Last reviewed: {d.editorial.lastReviewed}</p><p className="muted">状态：{d.reviewStatus||'source-structured'}<br/>本页面不是医疗建议；临床使用须核对最新当地标签。</p></aside></section><div className="warning">本页面用于医学教育，不提供个体化诊断、处方或剂量建议。药品标签会更新，美国、欧盟、瑞士、芬兰等地区的批准适应证也可能不同。</div><div className="sections">{sections.map(([h,p])=><article className="section" key={h}><h3>{h}</h3><p>{p}</p></article>)}</div><section className="panel"><h2>结构化元数据</h2><div className="meta-grid"><div><b>药理大类</b><span>{d.group}</span></div><div><b>精确分类</b><span>{d.class}</span></div><div><b>常见给药途径</b><span>{d.route}</span></div><div><b>标签</b><span>{d.tags.join(' · ')}</span></div></div></section><section className="panel"><h2>权威资料入口</h2>{d.sources.map(s=><a className="source" href={s.url} target="_blank" rel="noreferrer" key={s.url}>{s.name} ↗</a>)}</section></>}
function AntiAbuse({l}){return <section className="panel anti"><div className="eyebrow">ARKLIGHT SAFETY INITIATIVE</div><h1>{I18N[l].anti}</h1><p className="lead">药物是工具，不是玩具。按处方使用、避免把处方药分享给别人、识别过量征象并在需要时及时求助，都是降低伤害的关键行为。</p><div className="callout danger"><h3>不要把“处方药”理解成“绝对安全”</h3><p>处方药同样可能被误用、过量使用或与其他中枢神经系统抑制物叠加而造成严重后果。NIDA 将不按医嘱使用、使用他人处方或为了获得欣快感而使用处方药列为处方药误用的重要形式。</p></div><div className="sections"><article className="section"><h3>安全使用的基本原则</h3><ul><li>只使用为你本人开具或明确适用于你的药物。</li><li>不要自行增加频率、剂量或改变给药途径。</li><li>不要把处方药分享给家人、朋友或同事。</li><li>同时使用多种药物前核对相互作用，尤其是镇静药、阿片类药物和酒精。</li><li>按照当地药房或卫生机构要求安全储存和处理剩余药物。</li></ul></article><article className="section"><h3>识别阿片过量</h3><p>异常嗜睡、无法唤醒、呼吸缓慢或停止、身体松软、嘴唇或指甲发紫、发出咕噜/喘鸣样声音等都可能提示阿片过量，应立即呼叫急救。CDC 和 SAMHSA 均强调，纳洛酮可逆转阿片过量，但使用后仍需要紧急医疗评估。</p></article><article className="section"><h3>纳洛酮与求助</h3><p>纳洛酮是用于逆转阿片过量的救命药物。美国 CDC 资料指出其可通过鼻喷或注射等形式使用，并可在美国非处方获得。实际可获得性与法律规定因地区而异。</p></article><article className="section"><h3>成瘾不是道德失败</h3><p>物质使用障碍需要医疗和社会支持。对阿片使用障碍，循证药物治疗包括丁丙诺啡、美沙酮和纳曲酮。戒断本身并不等同于完整治疗，复发与过量风险需要持续管理。</p></article></div><div className="resource-grid"><a href="https://www.cdc.gov/overdose-prevention/reversing-overdose/about-naloxone.html" target="_blank" rel="noreferrer">CDC · Naloxone</a><a href="https://www.samhsa.gov/substance-use/treatment" target="_blank" rel="noreferrer">SAMHSA · Treatment</a><a href="https://nida.nih.gov/" target="_blank" rel="noreferrer">NIDA · Drug use & addiction</a><a href="https://www.samhsa.gov/find-help/helplines" target="_blank" rel="noreferrer">SAMHSA · 24/7 helplines</a></div><div className="emergency">如果有人无法唤醒、呼吸停止或出现严重中毒征象，请立即联系当地急救服务。美国紧急情况拨打 911；危机支持可联系 988。</div></section>}
function Simple({title,body}){return <section className="panel"><div className="eyebrow">ARKLIGHT MEDICAL EDUCATION</div><h1>{title}</h1><p className="muted">{body}</p><div className="sections"><article className="section"><h3>资料治理</h3><p>正式上线时为每条医学事实绑定来源、标签版本、司法辖区、审校者和审校日期，并对来源变化进行自动检测。FDA 指出批准标签与 DailyMed 中企业提交、当前使用的标签可能存在差异，因此本项目必须记录来源版本。</p></article><article className="section"><h3>知识结构</h3><p>药物名称、药理类别、给药途径、临床用途、安全警示、相互作用与地区监管信息分层存储；单个药物可继续扩展为更细的章节和引用。</p></article></div></section>}
function Routes(){let l=useContext(LocaleContext);return useRoutes([{path:'/',element:<Home l={l}/>},{path:'/drugs',element:<Drugs l={l}/>},{path:'/drugs/:slug',element:<Drug l={l}/>},{path:'/anti-abuse',element:<AntiAbuse l={l}/>},{path:'/classes',element:<Simple title={I18N[l].classes} body="按药理机制、治疗领域、作用靶点和给药途径组织知识，可继续接入 ATC、RxNorm、RxClass 等标准化体系。"/>},{path:'/learn',element:<Simple title={I18N[l].learn} body="从受体、酶、离子通道、药代动力学、药效动力学到药物警戒的系统课程。"/>},{path:'/safety',element:<Simple title={I18N[l].safety} body="围绕禁忌、警告、严重不良反应、相互作用、特殊人群和标签变更组织内容。"/>},{path:'/sources',element:<Simple title={I18N[l].sources} body="核心来源包括 FDA Drugs@FDA、FDA labeling、NLM DailyMed、NLM RxNorm/RxNav，并为 EMA、Swissmedic、Fimea 预留地区资料层。"/>}])}
function Root(){let[l,setL]=useState('zh-CN');return <LocaleContext.Provider value={l}><BrowserRouter><Shell locale={l} setLocale={setL}><Routes/></Shell></BrowserRouter></LocaleContext.Provider>}
createRoot(document.getElementById('root')).render(<Root/>);
