// Phone mock VIVO do hero — iPhone frame espelhando a tela REAL do painel mobile
// (docs/lp/referencias/app-dashboard-mobile.png): header com saudação + chip de
// streak + sino/avatar, banner "CRIE. VENDA. GANHE.", stats 2x2, card de nível
// com missões e a fileira "Vídeos que estão bombando" + tab bar.
// Loop de ~8s: toast de missão (+120 XP) → barra de missões enche → streak pulsa
// → carrossel de vídeos anda. Pausa de 2s. O toast é de missão porque é o que o
// app tem hoje (não existe notificação de comissão por venda).
// prefers-reduced-motion: frame estático no estado final.

const PhoneMock = () => {
  const reduced = React.useMemo(
    () => window.matchMedia && window.matchMedia("(prefers-reduced-motion: reduce)").matches,
    []
  );

  // stages: 0 idle · 1 toast de missão · 2 missões/bar · 3 streak pulsa · 4 vídeos andam
  const [stage, setStage] = React.useState(reduced ? 4 : 0);

  React.useEffect(() => {
    if (reduced) return;
    let timers = [];
    const run = () => {
      timers.forEach(clearTimeout);
      timers = [];
      setStage(0);
      timers.push(setTimeout(() => setStage(1), 900));    // 1. toast desliza + sino conta
      timers.push(setTimeout(() => setStage(2), 2400));   // 2. missão avança, barra enche
      timers.push(setTimeout(() => setStage(3), 4000));   // 3. streak pulsa
      timers.push(setTimeout(() => setStage(4), 5200));   // 4. carrossel de vídeos anda
      timers.push(setTimeout(run, 8000 + 2000));          // pausa 2s e loop
    };
    run();
    return () => timers.forEach(clearTimeout);
  }, [reduced]);

  const missaoFeita = stage >= 2;

  const videos = [
    { img: "assets/products/produto-gocase-tote-rosa.png", marca: "Gocase", bg: "linear-gradient(180deg, #FBE9E1, #E0B3A0)" },
    { img: "assets/products/produto-barbours-splash.png", marca: "Barbours", bg: "linear-gradient(180deg, #F5DEE4, #D8A3B2)" },
    { img: "assets/products/produto-kokeshi-kit.png", marca: "Kokeshi", bg: "linear-gradient(180deg, #FBE3F0, #E3A8CB)" },
    { img: "assets/products/produto-rituaria-suplementos.png", marca: "Rituária", bg: "linear-gradient(180deg, #F0EBE3, #C9BBA4)" },
  ];

  return (
    <div className={"phone-mock stage-" + stage + (reduced ? " reduced" : "")} aria-hidden="true">
      <style>{`
        .phone-mock {
          position: relative;
          width: min(300px, 78vw);
          margin-inline: auto;
        }
        .pm-frame {
          position: relative;
          aspect-ratio: 9 / 17;
          background: #0E0F1A;
          border-radius: 44px;
          padding: 10px;
          box-shadow:
            0 40px 80px -30px rgba(76,93,240,.45),
            0 16px 32px -16px rgba(20,12,80,.3),
            inset 0 0 0 2px #2A2D44;
        }
        .pm-island {
          position: absolute;
          top: 20px; left: 50%;
          transform: translateX(-50%);
          width: 84px; height: 22px;
          background: #0E0F1A;
          border-radius: 999px;
          z-index: 5;
        }
        .pm-screen {
          position: relative;
          width: 100%; height: 100%;
          background: #FAFAFC;
          border-radius: 34px;
          overflow: hidden;
          display: flex;
          flex-direction: column;
          justify-content: space-between;
          padding: 50px 11px 0;
          gap: 7px;
        }

        /* Toast de missão concluída (roxo gamificação) */
        .pm-toast {
          position: absolute;
          top: 10px; left: 10px; right: 10px;
          background: white;
          border: 1px solid #E5D8FA;
          border-radius: 14px;
          padding: 8px 10px;
          display: flex; gap: 8px; align-items: center;
          box-shadow: 0 10px 24px -10px rgba(139,92,246,.35);
          z-index: 6;
          transform: translateY(-140%);
          opacity: 0;
          transition: transform .55s var(--ease-pop), opacity .4s var(--ease);
        }
        .phone-mock.stage-1 .pm-toast,
        .phone-mock.stage-2 .pm-toast,
        .phone-mock.reduced .pm-toast {
          transform: translateY(0);
          opacity: 1;
        }
        .pm-toast .tico {
          width: 28px; height: 28px; border-radius: 9px;
          background: #F3EAFF; color: var(--gc-purple);
          display: grid; place-items: center; flex-shrink: 0;
        }
        .pm-toast .tt { font-size: 10px; font-weight: 700; color: #0E0F1A; line-height: 1.2; }
        .pm-toast .ts { font-size: 9px; color: var(--gc-purple); font-weight: 600; }

        /* Header real: saudação + chip de streak, sino com badge + avatar */
        .pm-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 8px; }
        .pm-head .ola { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
        .pm-head h3 { margin: 0; font-family: var(--display); font-size: 14px; font-weight: 800; color: #0E0F1A; }
        .pm-streak-chip {
          display: inline-flex; align-items: center; gap: 3px;
          background: #FFF3D6; color: #9A6A00;
          font-size: 7.5px; font-weight: 700;
          padding: 2px 7px; border-radius: 999px;
          position: relative;
        }
        .pm-streak-chip .flame {
          color: #E04A1B;
          display: grid; place-items: center;
          animation: pm-flicker .5s steps(2) infinite;
        }
        @keyframes pm-flicker {
          0%   { transform: scale(1) rotate(-2deg); }
          100% { transform: scale(1.1) rotate(2deg); }
        }
        .pm-streak-chip::after {
          content: "";
          position: absolute; inset: -3px;
          border-radius: 999px;
          border: 2px solid rgba(224,74,27,.5);
          opacity: 0;
          pointer-events: none;
        }
        .phone-mock.stage-3 .pm-streak-chip::after { animation: pm-pulse 1s var(--ease) 2; }
        @keyframes pm-pulse {
          0% { opacity: .8; transform: scale(.96); }
          100% { opacity: 0; transform: scale(1.12); }
        }
        .pm-head .sub { font-size: 8px; color: #8A8FAB; margin-top: 2px; }
        .pm-head .acoes { display: flex; align-items: center; gap: 6px; flex-shrink: 0; }
        .pm-bell {
          position: relative;
          width: 26px; height: 26px;
          border-radius: 9px;
          background: white;
          border: 1px solid var(--line);
          display: grid; place-items: center;
          color: var(--gc-purple);
        }
        .pm-bell .badge {
          position: absolute;
          top: -5px; right: -5px;
          min-width: 13px; height: 13px;
          border-radius: 999px;
          background: var(--gc-purple);
          color: white;
          font-size: 7px; font-weight: 700;
          display: grid; place-items: center;
          transition: transform .3s var(--ease-pop);
        }
        .phone-mock.stage-1 .pm-bell .badge { transform: scale(1.25); }
        .pm-avatar {
          width: 26px; height: 26px; border-radius: 50%;
          background: linear-gradient(135deg, var(--gc-purple-light), var(--gc-blue));
          color: white;
          display: grid; place-items: center;
          font-family: var(--display); font-weight: 700; font-size: 10px;
        }

        /* Banner CRIE. VENDA. GANHE. (o hero do painel real) */
        .pm-banner {
          border-radius: 12px;
          background: linear-gradient(120deg, #4C5DF0 0%, #6E59E6 45%, #B97FBB 100%);
          padding: 10px 11px;
          color: white;
          position: relative;
          overflow: hidden;
        }
        .pm-banner .tag { font-family: var(--display); font-weight: 800; font-style: italic; font-size: 9px; color: var(--gc-purple-light); letter-spacing: .04em; }
        .pm-banner h4 { margin: 2px 0 0; font-family: var(--display); font-size: 11px; font-weight: 800; line-height: 1.15; }
        .pm-banner h4 .lime { color: var(--gc-lime); }
        .pm-banner .sub { font-size: 6.5px; opacity: .85; margin-top: 2px; max-width: 75%; }
        .pm-banner-btn {
          display: inline-flex; align-items: center; gap: 3px;
          background: var(--gc-lime); color: #1A2200;
          font-weight: 700; font-size: 7.5px;
          padding: 4px 9px; border-radius: 8px;
          margin-top: 6px;
        }
        .pm-banner .arte {
          position: absolute; right: 8px; top: 50%;
          transform: translateY(-50%) rotate(8deg);
          font-size: 26px;
          filter: drop-shadow(0 4px 8px rgba(0,0,0,.25));
        }

        /* Stats 2x2 como no painel real */
        .pm-stats { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; }
        .pm-stat {
          background: white;
          border: 1px solid var(--line);
          border-radius: 11px;
          padding: 7px 9px;
        }
        .pm-stat .top { display: flex; align-items: center; gap: 5px; }
        .pm-stat .ico { width: 15px; height: 15px; border-radius: 5px; display: grid; place-items: center; flex-shrink: 0; }
        .pm-stat .label { font-size: 7px; color: #5A5E78; font-weight: 600; }
        .pm-stat .v { font-family: var(--display); font-size: 13px; font-weight: 800; color: #0E0F1A; margin-top: 2px; letter-spacing: -0.01em; }

        /* Card de nível/missões (a barra enche no loop) */
        .pm-nivel {
          background: white;
          border: 1px solid var(--line);
          border-radius: 12px;
          padding: 8px 10px;
          display: flex; gap: 8px; align-items: center;
        }
        .pm-nivel .selo {
          width: 30px; height: 30px;
          border-radius: 9px;
          background: linear-gradient(135deg, #EEF0FE, #F3EAFF);
          border: 1px solid var(--line);
          display: grid; place-items: center;
          color: var(--gc-purple);
          flex-shrink: 0;
        }
        .pm-nivel .info { flex: 1; min-width: 0; }
        .pm-nivel .linha1 { display: flex; align-items: center; gap: 5px; }
        .pm-nivel .tier { font-family: var(--display); font-size: 10px; font-weight: 800; color: #0E0F1A; }
        .pm-lv {
          display: inline-flex; align-items: center; gap: 2px;
          background: var(--gc-lime); color: #1A2200;
          font-size: 6.5px; font-weight: 800;
          padding: 1px 6px; border-radius: 999px;
        }
        .pm-nivel .missoes { font-size: 7.5px; color: #5A5E78; font-weight: 600; margin-top: 2px; }
        .pm-bar {
          margin-top: 4px;
          height: 5px;
          border-radius: 999px;
          background: var(--gc-blue-050);
          overflow: hidden;
        }
        .pm-bar > span {
          display: block;
          height: 100%;
          width: 100%;
          border-radius: 999px;
          background: linear-gradient(90deg, var(--gc-blue), var(--gc-purple));
          transform: scaleX(.5);
          transform-origin: left center;
          transition: transform .8s var(--ease-expo);
        }
        .phone-mock.stage-2 .pm-bar > span,
        .phone-mock.stage-3 .pm-bar > span,
        .phone-mock.stage-4 .pm-bar > span,
        .phone-mock.reduced .pm-bar > span { transform: scaleX(.67); }
        .pm-nivel .pct { font-family: var(--display); font-size: 10px; font-weight: 800; color: var(--gc-blue); flex-shrink: 0; }

        /* Vídeos que estão bombando (carrossel anda uma casa no stage 4) */
        .pm-videos { flex: 1; min-height: 0; overflow: hidden; }
        .pm-videos .titulo { font-family: var(--display); font-size: 10px; font-weight: 800; color: #0E0F1A; }
        .pm-videos .titulo .qt { font-size: 7px; color: #8A8FAB; font-weight: 600; margin-left: 4px; }
        .pm-vrow {
          display: flex; gap: 6px;
          margin-top: 6px;
          height: calc(100% - 20px);
          transform: translateX(0);
          transition: transform .7s var(--ease-expo);
        }
        .phone-mock.stage-4 .pm-vrow,
        .phone-mock.reduced .pm-vrow { transform: translateX(-104px); }
        .pm-vcard {
          position: relative;
          width: 98px;
          flex-shrink: 0;
          border-radius: 10px;
          overflow: hidden;
          padding: 6px;
        }
        .pm-vcard .novo {
          display: inline-flex; align-items: center; gap: 3px;
          background: var(--gc-lime); color: #1A2200;
          font-size: 6px; font-weight: 800;
          padding: 2px 6px; border-radius: 999px;
          position: relative; z-index: 2;
        }
        .pm-vcard .novo::before { content: ""; width: 3px; height: 3px; border-radius: 50%; background: #1A2200; }
        .pm-vcard .foto {
          position: absolute; inset: 0;
          display: flex; align-items: flex-end; justify-content: center;
          padding: 14px 10px 16px;
        }
        .pm-vcard .foto img { max-width: 100%; max-height: 100%; object-fit: contain; mix-blend-mode: multiply; }
        .pm-vcard .play {
          position: absolute; top: 50%; left: 50%;
          transform: translate(-50%, -50%);
          width: 18px; height: 18px;
          border-radius: 50%;
          background: rgba(255,255,255,.4);
          backdrop-filter: blur(2px);
          display: grid; place-items: center;
          color: white;
          z-index: 2;
        }
        .pm-vcard .rodape {
          position: absolute; left: 5px; right: 5px; bottom: 5px;
          background: rgba(14,15,26,.55);
          border-radius: 7px;
          padding: 3px 6px;
          color: white;
          font-size: 6.5px; font-weight: 700;
          white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
          z-index: 2;
        }

        /* Tab bar inferior como no app */
        .pm-tabs {
          display: flex;
          justify-content: space-between;
          border-top: 1px solid var(--line);
          background: white;
          margin: 0 -11px;
          padding: 6px 14px calc(8px + 6px);
        }
        .pm-tab {
          display: flex; flex-direction: column; align-items: center; gap: 2px;
          font-size: 6px; font-weight: 600; color: #8A8FAB;
        }
        .pm-tab.ativo { color: var(--gc-blue); font-weight: 700; }

        @media (prefers-reduced-motion: reduce) {
          .pm-toast, .pm-bar > span, .pm-vrow, .pm-bell .badge { transition: none; }
          .pm-streak-chip .flame { animation: none; }
          .phone-mock.stage-3 .pm-streak-chip::after { animation: none; }
        }
      `}</style>

      <div className="pm-frame">
        <div className="pm-island" />
        <div className="pm-screen">
          <div className="pm-toast">
            <span className="tico"><Icon name="star" size={16} /></span>
            <div>
              <div className="tt">Missão concluída</div>
              <div className="ts">+120 XP · Poste 3 vídeos na semana</div>
            </div>
          </div>

          <div className="pm-head">
            <div>
              <div className="ola">
                <h3>Olá, Marina!</h3>
                <span className="pm-streak-chip">
                  <span className="flame"><Icon name="flame" size={9} stroke={2.4} /></span>
                  14 dias
                </span>
              </div>
              <div className="sub">Hora de criar, vender e conquistar.</div>
            </div>
            <div className="acoes">
              <span className="pm-bell">
                <Icon name="bell" size={13} />
                <span className="badge">{stage >= 1 ? 3 : 2}</span>
              </span>
              <span className="pm-avatar">M</span>
            </div>
          </div>

          <div className="pm-banner">
            <div className="tag">CRIE. VENDA. GANHE.</div>
            <h4>Você no topo com a <span className="lime">GoCreators!</span></h4>
            <div className="sub">Participe dos desafios, suba de nível e conquiste prêmios.</div>
            <span className="pm-banner-btn">Comece a criar ↗</span>
            <span className="arte">🏆</span>
          </div>

          <div className="pm-stats">
            <div className="pm-stat">
              <div className="top">
                <span className="ico" style={{ background: "#EEF0FE", color: "var(--gc-blue)" }}><Icon name="shopping-bag" size={9} stroke={2.4} /></span>
                <span className="label">Vendas</span>
              </div>
              <div className="v">132</div>
            </div>
            <div className="pm-stat">
              <div className="top">
                <span className="ico" style={{ background: "#E6F8EE", color: "#1E8E4A" }}><Icon name="money-bag" size={9} stroke={2.4} /></span>
                <span className="label">Receita</span>
              </div>
              <div className="v">R$ 4.870</div>
            </div>
            <div className="pm-stat">
              <div className="top">
                <span className="ico" style={{ background: "#F3EAFF", color: "var(--gc-purple)" }}><Icon name="video" size={9} stroke={2.4} /></span>
                <span className="label">Vídeos</span>
              </div>
              <div className="v">26</div>
            </div>
            <div className="pm-stat">
              <div className="top">
                <span className="ico" style={{ background: "#E8F4FE", color: "#2F88D5" }}><Icon name="play" size={9} stroke={2.4} /></span>
                <span className="label">Views</span>
              </div>
              <div className="v">212K</div>
            </div>
          </div>

          <div className="pm-nivel">
            <span className="selo"><Icon name="spark" size={15} stroke={2.2} /></span>
            <div className="info">
              <div className="linha1">
                <span className="tier">Growth</span>
                <span className="pm-lv">⚡ LV. 5</span>
              </div>
              <div className="missoes">{missaoFeita ? "4" : "3"} / 6 missões</div>
              <div className="pm-bar"><span /></div>
            </div>
            <span className="pct">{missaoFeita ? "67" : "50"}%</span>
          </div>

          <div className="pm-videos">
            <div className="titulo">Vídeos que estão bombando <span className="qt">24 vídeos</span></div>
            <div className="pm-vrow">
              {videos.map((v, i) => (
                <div className="pm-vcard" key={i} style={{ background: v.bg }}>
                  <span className="novo">NOVO VÍDEO</span>
                  <span className="foto"><img src={v.img} alt="" loading="lazy" /></span>
                  <span className="play"><Icon name="play" size={8} /></span>
                  <span className="rodape">{v.marca}</span>
                </div>
              ))}
            </div>
          </div>

          <div className="pm-tabs">
            <span className="pm-tab ativo"><Icon name="menu" size={11} />Painel</span>
            <span className="pm-tab"><Icon name="rocket" size={11} />Jornada</span>
            <span className="pm-tab"><Icon name="trophy" size={11} />Desafios</span>
            <span className="pm-tab"><Icon name="trend-up" size={11} />Ranking</span>
            <span className="pm-tab"><Icon name="shopping-bag" size={11} />Marcas</span>
          </div>
        </div>
      </div>
    </div>
  );
};

window.PhoneMock = PhoneMock;
