/* Compact product mockups styled from the Flywheel design system,
   embedded inside the narrative chapters. */

function BrowserChrome({ url, children, dark }) {
  return (
    <div style={{ borderRadius: 16, overflow: 'hidden', border: `1px solid ${dark ? 'rgba(255,255,255,0.1)' : 'var(--border-subtle)'}`,
      boxShadow: dark ? '0 40px 90px rgba(0,0,0,0.4)' : 'var(--shadow-lg)', background: dark ? 'var(--panel-2)' : 'var(--card-bg)' }}>
      <div style={{ display: 'flex', alignItems: 'center', gap: 8, padding: '12px 16px', borderBottom: `1px solid ${dark ? 'rgba(255,255,255,0.08)' : 'var(--border-subtle)'}` }}>
        <span style={{ width: 11, height: 11, borderRadius: 999, background: '#ff5f57' }} />
        <span style={{ width: 11, height: 11, borderRadius: 999, background: '#febc2e' }} />
        <span style={{ width: 11, height: 11, borderRadius: 999, background: '#28c840' }} />
        <span style={{ marginLeft: 12, flex: 1, fontFamily: 'var(--font-mono)', fontSize: 12,
          color: dark ? 'rgba(255,255,255,0.5)' : 'var(--gray-text)', background: dark ? 'rgba(255,255,255,0.05)' : 'var(--gray-100)',
          padding: '6px 12px', borderRadius: 8 }}>{url}</span>
      </div>
      <div style={{ padding: 'clamp(18px,2.4vw,28px)' }}>{children}</div>
    </div>
  );
}

/* Brand Analyzer, URL ingests, fragments extract */
function BrandAnalyzerMock() {
  const swatches = ['#0c4da2', '#101010', '#2664e3', '#dadada', '#ffffff'];
  const personas = ['The Innovator', 'The Sage', 'The Caregiver'];
  return (
    <BrowserChrome url="app.experienceflywheel.ai/brand-analyzer">
      <div style={{ display: 'flex', alignItems: 'center', gap: 12, marginBottom: 22 }}>
        <div style={{ flex: 1, display: 'flex', alignItems: 'center', gap: 10, border: '1px solid var(--border-subtle)', borderRadius: 10, padding: '11px 14px' }}>
          <Ico name="spark" size={16} color="var(--lime-deep)" />
          <span style={{ fontFamily: 'var(--font-mono)', fontSize: 13, color: 'var(--text-body)' }}>https://www.samsung.com/ca</span>
        </div>
        <span className="btn btn-lime" style={{ padding: '11px 20px', fontSize: 14 }}>Analyze</span>
      </div>
      <p style={{ fontFamily: 'var(--font-mono)', fontSize: 11, letterSpacing: '0.12em', textTransform: 'uppercase', color: 'var(--gray-text)', margin: '0 0 14px' }}>Extracted autonomously</p>
      <div className="grid" style={{ gridTemplateColumns: 'repeat(3,1fr)', gap: 14 }}>
        <div className="fcard" style={{ padding: 16 }}>
          <p className="ana-l">Palette</p>
          <div style={{ display: 'flex', gap: 6, marginTop: 10 }}>
            {swatches.map((s) => <span key={s} style={{ width: 26, height: 26, borderRadius: 7, background: s, border: '1px solid var(--gray-200)' }} />)}
          </div>
        </div>
        <div className="fcard" style={{ padding: 16 }}>
          <p className="ana-l">Type</p>
          <div style={{ marginTop: 8, fontSize: 15, fontWeight: 700 }}>SamsungSharpSans</div>
          <div style={{ fontSize: 13, color: 'var(--text-muted)' }}>SamsungOne · body</div>
        </div>
        <div className="fcard" style={{ padding: 16 }}>
          <p className="ana-l">Logo</p>
          <div style={{ marginTop: 12 }}><img src="assets/samsung-logo-black.png" alt="Samsung" style={{ height: 24 }} /></div>
        </div>
      </div>
      <div style={{ display: 'flex', flexWrap: 'wrap', gap: 8, marginTop: 14 }}>
        {personas.map((p) => (
          <span key={p} style={{ display: 'inline-flex', alignItems: 'center', gap: 6, background: 'var(--green-soft-bg)', color: 'var(--green-text)', padding: '6px 13px', borderRadius: 999, fontSize: 13, fontWeight: 600 }}>
            <Ico name="check" size={13} color="var(--green-text)" /> {p}
          </span>
        ))}
      </div>
      <style>{`.ana-l{font-family:var(--font-mono);font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--gray-text);margin:0}`}</style>
    </BrowserChrome>
  );
}

/* Persona Lens, two reads on a piece of content */
function PersonaLensMock({ slotId = 'sample-persona' }) {
  const Gauge = ({ label, pct, color }) => (
    <div style={{ flex: 1 }}>
      <div style={{ display: 'flex', justifyContent: 'space-between', marginBottom: 8 }}>
        <span style={{ fontSize: 13, color: 'var(--text-muted)' }}>{label}</span>
        <span style={{ fontFamily: 'var(--font-mono)', fontWeight: 700, fontSize: 14 }}>{pct}%</span>
      </div>
      <div style={{ height: 8, borderRadius: 999, background: 'var(--gray-100)', overflow: 'hidden' }}>
        <Reveal variant="clip" style={{ height: '100%' }}>
          <div style={{ height: '100%', width: `${pct}%`, background: color, borderRadius: 999 }} />
        </Reveal>
      </div>
    </div>
  );
  return (
    <div className="fcard" style={{ padding: 20, display: 'grid', gridTemplateColumns: '0.8fr 1.2fr', gap: 20, alignItems: 'stretch' }}>
      <div style={{ borderRadius: 12, overflow: 'hidden', minHeight: 200, background: 'var(--gray-100)' }}>
        <img src="assets/samsung-oled-admat.jpg" alt="Samsung OLED campaign asset" style={{ width: '100%', height: '100%', objectFit: 'cover', minHeight: 200 }} />
      </div>
      <div style={{ display: 'flex', flexDirection: 'column' }}>
        <p style={{ fontFamily: 'var(--font-mono)', fontSize: 11, letterSpacing: '0.1em', textTransform: 'uppercase', color: 'var(--lime)', margin: '0 0 14px' }}>Persona Lens · two reads</p>
        <div style={{ display: 'flex', gap: 18, marginBottom: 18 }}>
          <Gauge label="On-brand fit" pct={92} color="var(--lime)" />
          <Gauge label="Persona match" pct={88} color="var(--green-deep)" />
        </div>
        <p className="body" style={{ fontSize: 14, marginBottom: 14 }}>Strong match for <em>The Innovator</em>, confident, innovation-led. Brand kit and persona both align; tighten the caption to sharpen the message.</p>
        <div style={{ marginTop: 'auto', display: 'flex', gap: 8 }}>
          <span style={{ fontFamily: 'var(--font-mono)', fontSize: 11, letterSpacing: '0.08em', textTransform: 'uppercase', padding: '6px 12px', borderRadius: 999, background: 'var(--status-confirmed-bg)', color: 'var(--status-confirmed-fg)', border: '1px solid var(--status-confirmed-bd)' }}>On-brand</span>
          <span style={{ fontFamily: 'var(--font-mono)', fontSize: 11, letterSpacing: '0.08em', textTransform: 'uppercase', padding: '6px 12px', borderRadius: 999, background: 'var(--status-medium-bg)', color: 'var(--status-medium-fg)', border: '1px solid var(--status-medium-bd)' }}>Directional</span>
        </div>
      </div>
    </div>
  );
}

/* Pixel Fix, artifact detection with bounding boxes */
function PixelFixMock({ slotId = 'sample-pixelfix', stretch = false }) {
  return (
    <div className="fcard" style={{ padding: 20, ...(stretch ? { flex: 1, display: 'flex', flexDirection: 'column' } : {}) }}>
      <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: 16 }}>
        <p style={{ fontFamily: 'var(--font-mono)', fontSize: 11, letterSpacing: '0.1em', textTransform: 'uppercase', color: 'var(--lime)', margin: 0 }}>Pixel Fix · scan</p>
        <span style={{ fontFamily: 'var(--font-mono)', fontSize: 11, letterSpacing: '0.08em', textTransform: 'uppercase', padding: '5px 12px', borderRadius: 999, background: 'var(--status-confirmed-bg)', color: 'var(--status-confirmed-fg)', border: '1px solid var(--status-confirmed-bd)' }}>Clean</span>
      </div>
      <div style={{ position: 'relative', borderRadius: 12, overflow: 'hidden', minHeight: 240, background: 'var(--gray-100)', ...(stretch ? { flex: 1 } : {}) }}>
        <img src="assets/samsung-oled-admat.jpg" alt="Samsung OLED campaign asset" style={{ width: '100%', height: '100%', objectFit: 'cover', minHeight: 240, display: 'block', ...(stretch ? { position: 'absolute', inset: 0 } : {}) }} />
        {/* scan callouts over real regions */}
        <div className="bbox" style={{ left: '35%', top: '27%', width: '31%', height: '23%', borderColor: '#1b8a4b' }}>
          <span style={{ background: '#1b8a4b' }}>likeness · ok</span>
        </div>
        <div className="bbox" style={{ left: '22%', top: '62%', width: '54%', height: '13%', borderColor: '#1b8a4b' }}>
          <span style={{ background: '#1b8a4b' }}>text legible · ok</span>
        </div>
      </div>
      <p className="body" style={{ fontSize: 14, marginTop: 14 }}>Pixel Fix scans every generation for garbled text, broken anatomy and melted edges, with one-click inpaint fixes. This Samsung asset came back clean.</p>
      <style>{`.bbox{position:absolute;border:2px dashed;border-radius:6px}.bbox span{position:absolute;top:-22px;left:-2px;font-family:var(--font-mono);font-size:10px;color:#fff;padding:2px 7px;border-radius:5px;white-space:nowrap}`}</style>
    </div>
  );
}

/* Mini calendar */
function CalendarMock() {
  const ev = { 4: '#3a7a2f', 9: '#1f6f7a', 12: '#c0396b', 17: '#b9761a', 23: '#2f8a5b', 25: '#6b4fbf' };
  return (
    <div style={{ borderRadius: 16, overflow: 'hidden', border: '1px solid var(--off-black)' }}>
      <div style={{ background: 'var(--off-black)', padding: '16px 20px', display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>
        <span style={{ fontFamily: 'var(--font-serif)', color: '#fff', fontSize: 22, whiteSpace: 'nowrap' }}>JUNE <span style={{ borderBottom: '2px solid var(--lime)' }}>2026</span></span>
        <span style={{ fontFamily: 'var(--font-mono)', fontSize: 11, letterSpacing: '0.08em', color: 'rgba(255,255,255,0.6)', textTransform: 'uppercase', whiteSpace: 'nowrap' }}>Samsung Canada</span>
      </div>
      <div style={{ display: 'grid', gridTemplateColumns: 'repeat(7,1fr)', background: 'var(--card-bg)' }}>
        {Array.from({ length: 28 }, (_, i) => i + 1).map((d) => (
          <div key={d} style={{ minHeight: 52, borderRight: '1px solid var(--gray-100)', borderBottom: '1px solid var(--gray-100)', padding: '7px 9px' }}>
            <span style={{ fontFamily: 'var(--font-mono)', fontSize: 11, color: 'var(--text-muted)' }}>{d}</span>
            {ev[d] && <div style={{ marginTop: 5, height: 6, borderRadius: 999, background: ev[d], width: '70%' }} />}
          </div>
        ))}
      </div>
    </div>
  );
}

Object.assign(window, { BrowserChrome, BrandAnalyzerMock, PersonaLensMock, PixelFixMock, CalendarMock });
