<!doctype html>
<html lang="zh-CN">
<head>
  <meta charset="utf-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1" />
  <title>商品视觉整案</title>
  <link rel="stylesheet" href="/styles.css" />
  <style>
    .preview-note { font-size: 12px; color: #9aa1b5; }
    .nav-mini { display:flex; gap:10px; }
    .nav-mini a { color:#9aa1b5; font-size:13px; }
    .nav-mini a.on { color:#e2c48a; }
  </style>
</head>
<body>
  <div id="app"></div>
  <script>
    const views = {
      login: () => `
        <div class="login-wrap">
          <form class="card login-card" onsubmit="go('dash');return false">
            <div class="brand"><span class="brand-mark"></span>商品视觉整案</div>
            <h1>进入工作台</h1>
            <p class="muted">上传商品图与事实参数，产出一整套可上架视觉包。</p>
            <div class="field"><label>邮箱</label><input value="demo@local" /></div>
            <div class="field"><label>密码</label><input type="password" value="demo" /></div>
            <button class="btn primary" type="submit" style="width:100%;margin-top:8px">登录演示账号</button>
            <p class="preview-note" style="margin-top:16px">这是 Cloudflare 上的界面预览。生成管线仍在本机 / 服务器跑，不在 Workers 里。</p>
          </form>
        </div>`,
      dash: () => `
        ${shell(`
          <div class="row" style="margin-bottom:20px">
            <div>
              <h1 style="margin:0 0 6px">最近项目</h1>
              <p class="muted">从商品事实出发，自动完成分析、策划、生图、质检与导出。</p>
            </div>
            <a class="btn primary" href="#new">新建商品整案</a>
          </div>
          <div class="grid projects">
            <a href="#gallery" class="card" style="padding:18px">
              <div class="row"><strong>20Bar 半自动意式咖啡机</strong><span class="chip ok">已完成</span></div>
              <p class="muted" style="margin:10px 0 0">咖啡机 · amazon · zh-CN</p>
              <p class="muted" style="margin:6px 0 0">6 主图 + 10 详情 + 长图已就绪</p>
            </a>
            <a href="#progress" class="card" style="padding:18px">
              <div class="row"><strong>5L 空气炸锅</strong><span class="chip warn">生成中</span></div>
              <p class="muted" style="margin:10px 0 0">空气炸锅 · taobao · zh-CN</p>
              <p class="muted" style="margin:6px 0 0">正在生成详情页 8 / 14</p>
            </a>
          </div>`)}`,
      new: () => `
        ${shell(`
          <h1 style="margin-top:0">新建商品整案</h1>
          <div class="stepper">
            <div class="step on">1. 上传图片</div>
            <div class="step">2. 商品信息</div>
            <div class="step">3. 输出设置</div>
          </div>
          <form class="card" style="padding:22px" onsubmit="go('progress');return false">
            <div id="wiz">
              <div class="upload">
                <p>上传 1～6 张真实商品图，建议正面 / 45° / 细节。</p>
                <input type="file" accept="image/*" multiple disabled />
                <p class="preview-note">预览页不实际上传。</p>
              </div>
            </div>
            <div class="row" style="margin-top:20px">
              <button type="button" class="btn ghost" onclick="wiz(-1)">上一步</button>
              <button type="button" class="btn primary" id="wizNext" onclick="wiz(1)">下一步</button>
            </div>
          </form>`)}`,
      progress: () => `
        ${shell(`
          <h1 style="margin-top:0">5L 空气炸锅</h1>
          <p class="muted">系统正在完成整案生产。过程只展示阶段，不展示模型或算力细节。</p>
          <div class="stages">
            <div class="stage done">分析</div>
            <div class="stage done">策划</div>
            <div class="stage active">生图</div>
            <div class="stage">质检</div>
            <div class="stage">导出</div>
          </div>
          <div class="bar"><span style="width:64%"></span></div>
          <p style="margin-top:16px">正在生成详情页 8 / 14</p>
          <p class="preview-note"><a href="#gallery" style="color:#e2c48a">跳到已完成的咖啡机素材库 →</a></p>`)}`,
      gallery: () => `
        ${shell(`
          <div class="row">
            <div>
              <h1 style="margin:0 0 6px">20Bar 半自动意式咖啡机</h1>
              <span class="chip ok">已完成</span>
            </div>
            <a class="btn ghost" href="#dash">返回工作台</a>
          </div>
          <div class="tabs">
            <button class="tab on" onclick="tab('main',this)">主图(6)</button>
            <button class="tab" onclick="tab('detail',this)">详情(10)</button>
            <button class="tab" onclick="tab('long',this)">长图</button>
            <button class="tab" onclick="tab('extra',this)">附加</button>
          </div>
          <div id="gal"></div>`, `<a class="btn primary" href="/assets/long.jpg" download>下载 ZIP</a>`)}`
    };

    const mains = ["01_main","02_hero","03_feature","04_detail","05_size","06_brand"];
    const details = ["HERO","卖点总览","20Bar","温控","蒸汽","操作","结构","尺寸","规格","品牌"];

    function shell(inner, right) {
      return `<div class="app-shell">
        <header class="topbar">
          <a href="#dash" class="brand"><span class="brand-mark"></span>商品视觉整案</a>
          <div class="top-meta">
            ${right || ""}
            <span class="nav-mini">
              <a href="#login">登录</a>
              <a href="#dash">工作台</a>
              <a href="#new">新建</a>
              <a href="#progress">进度</a>
              <a href="#gallery">素材库</a>
            </span>
            <span>演示账号</span>
          </div>
        </header>
        <main class="page">${inner}</main>
      </div>`;
    }

    let step = 0;
    const stepsHtml = [
      `<div class="upload"><p>上传 1～6 张真实商品图，建议正面 / 45° / 细节。</p><input type="file" multiple disabled /><p class="preview-note">预览页不实际上传。</p></div>`,
      `<div class="field"><label>品类</label><select><option>咖啡机</option><option>空气炸锅</option></select></div>
       <div class="field"><label>商品名称</label><input value="20Bar 半自动意式咖啡机" /></div>
       <p class="muted">核心卖点 1～8 条。事实保留，营销文案可由系统改写。</p>
       <div class="feature-row"><input value="20Bar 高压萃取" /><input value="充分释放咖啡油脂" /><button class="btn ghost" type="button">删</button></div>
       <div class="feature-row"><input value="精准温控" /><input value="萃取更稳定" /><button class="btn ghost" type="button">删</button></div>
       <button class="btn ghost" type="button">添加卖点</button>
       <p class="muted" style="margin-top:18px">规格是事实。留空的项不会出现在详情页，系统不会补全。</p>
       <div class="spec-row"><input value="额定功率" readonly /><input value="1350W" /><span></span></div>
       <div class="spec-row"><input value="泵压" readonly /><input value="20Bar" /><span></span></div>
       <div class="spec-row"><input value="水箱容量" readonly /><input value="1.5L" /><span></span></div>`,
      `<div class="grid" style="grid-template-columns:1fr 1fr;gap:12px">
        <div class="field"><label>平台</label><select><option>Amazon</option><option>淘宝</option></select></div>
        <div class="field"><label>市场</label><select><option>美国</option><option>中国</option></select></div>
        <div class="field"><label>语言</label><select><option>中文</option><option>English</option></select></div>
        <div class="field"><label>风格</label><select><option>高端</option><option>干净</option></select></div>
        <div class="field"><label>质量档</label><select><option>标准</option><option>经济</option><option>专业</option></select></div>
       </div>
       <div class="checks" style="margin-top:8px">
         <label class="check"><input type="checkbox" checked /> 主图套图</label>
         <label class="check"><input type="checkbox" checked /> 详情模块</label>
         <label class="check"><input type="checkbox" checked /> 长详情页</label>
         <label class="check"><input type="checkbox" checked /> 无文字母版</label>
       </div>`
    ];

    function render() {
      const name = (location.hash || "#login").slice(1) || "login";
      document.getElementById("app").innerHTML = (views[name] || views.login)();
      document.querySelectorAll(".nav-mini a").forEach(a => {
        if (a.getAttribute("href") === "#" + name) a.classList.add("on");
      });
      if (name === "new") {
        step = 0;
        paintWiz();
      }
      if (name === "gallery") tab("main");
    }
    function go(name) { location.hash = name; }
    function wiz(d) {
      step = Math.max(0, Math.min(2, step + d));
      paintWiz();
    }
    function paintWiz() {
      const el = document.getElementById("wiz");
      if (!el) return;
      el.innerHTML = stepsHtml[step];
      document.querySelectorAll(".stepper .step").forEach((n,i) => n.classList.toggle("on", i===step));
      const btn = document.getElementById("wizNext");
      if (btn) {
        if (step < 2) { btn.textContent = "下一步"; btn.onclick = () => wiz(1); btn.type = "button"; }
        else { btn.textContent = "生成整套商品素材"; btn.onclick = () => go("progress"); }
      }
    }
    function tab(kind, btn) {
      document.querySelectorAll(".tab").forEach(t => t.classList.remove("on"));
      if (btn) btn.classList.add("on");
      else {
        const first = document.querySelector(".tab");
        if (first) first.classList.add("on");
      }
      const gal = document.getElementById("gal");
      if (!gal) return;
      if (kind === "long") {
        gal.innerHTML = `<div class="card long-view"><img src="/assets/long.jpg" alt="长图" /></div>`;
        return;
      }
      if (kind === "extra") {
        gal.innerHTML = `<div class="gallery">
          <article class="card asset"><div class="empty">product_cutout.png</div><div class="meta"><strong>透明商品图</strong></div></article>
          <article class="card asset"><div class="empty">metadata.json</div><div class="meta"><strong>metadata.json</strong></div></article>
        </div>`;
        return;
      }
      const items = kind === "main"
        ? mains.map((f,i) => ({src:`/assets/${f}.jpg`, name:f+".jpg", copy:["白底主图","生活场景","20Bar 高压萃取","产品细节","尺寸结构","品牌主视觉"][i]}))
        : details.map((n,i) => ({src:`/assets/${mains[i%6]}.jpg`, name:`Detail_${String(i+1).padStart(2,"0")}.jpg`, copy:n}));
      gal.innerHTML = `<div class="gallery">${items.map(a => `
        <article class="card asset">
          <img src="${a.src}" alt="${a.name}" />
          <div class="meta">
            <strong>${a.name}</strong>
            <p class="muted">${a.copy}</p>
            <div class="actions">
              <button class="btn ghost">重新生成</button>
              <button class="btn ghost">编辑文案</button>
              <a class="btn ghost" href="${a.src}" download>下载</a>
            </div>
          </div>
        </article>`).join("")}</div>`;
    }
    window.go = go; window.wiz = wiz; window.tab = tab;
    window.addEventListener("hashchange", render);
    render();
  </script>
</body>
</html>
