(() => {
  window.MamoruApp = window.MamoruApp || {};

  const { C, NS, PRODUCTS, SCENES, CATEGORIES, Wrap, SectionHeader, ProductCard, TextList, useIsMobile } = window.MamoruApp;

  const SCENE_CONTENT = {
    "夜道": {
      eyebrow: "Scene Guide",
      title: "夜道・帰宅時の防犯グッズ",
      body: "暗い道や遅い時間の帰宅に備えて、持ち歩きやすさ、気づきやすさ、助けを呼びやすさを落ち着いて比べます。",
      concerns: ["駅から家までの道が暗い", "鍵を出す時に周囲が気になる", "もしもの時に周囲へ知らせたい"],
      thinking: [
        { title: "先に気づける状態を作る", body: "明るさや音で、周囲の変化に気づきやすくします。" },
        { title: "すぐ使える場所に持つ", body: "バッグの奥ではなく、鍵や手元に近い位置で使えるものを選びます。" },
        { title: "帰宅後の動きも考える", body: "玄関前や共用部で慌てないよう、鍵・ライト・通知の流れを整えます。" },
      ],
      productTitle: "夜道・帰宅時に向いている商品",
      productBody: "持ち歩きやすさ、気づきやすさ、助けを呼びやすさを基準に、関連する商品を表示しています。",
      choiceMemo: "夜道用は、強さよりも毎日持てることが大切です。重さ、音の出し方、取り出しやすさ、充電や電池交換の手間を一緒に確認してください。",
      lawNote: "音が出るものやスプレー類は、使用場所や携帯の条件を確認してから選びます。商品の説明、販売店の案内、地域のルールを落ち着いて確認してください。",
    },
    "部屋・玄関": {
      eyebrow: "Scene Guide",
      title: "部屋・玄関の防犯グッズ",
      body: "帰宅後に落ち着いて過ごせるように、外から入りにくくする備えや、窓・玄関まわりの変化に気づきやすくする備えを整理します。",
      concerns: ["玄関や窓の閉め忘れが気になる", "留守中の部屋の様子を確認したい", "帰宅後に玄関前や室内で落ち着ける状態にしたい"],
      thinking: [
        { title: "入りにくい状態を作る", body: "補助錠やカバーで、玄関・窓まわりに小さな備えを足します。" },
        { title: "変化に気づきやすくする", body: "窓センサーやカメラで、開閉や室内の様子を確認しやすくします。" },
        { title: "続けやすい位置に置く", body: "毎日確認しやすい玄関、窓、通路などに無理なく設置します。" },
      ],
      productTitle: "部屋・玄関に向いている商品",
      productBody: "補助錠、窓アラーム、屋内カメラ、ドアスコープカバー、センサーライトなど、帰宅後の安心につながる商品を表示しています。",
      choiceMemo: "部屋・玄関用は、賃貸でも使いやすいか、設置に工具が必要か、日常の開け閉めを邪魔しないかを確認すると選びやすくなります。",
      lawNote: "設置型の商品は、賃貸契約や共用部のルールに合うかを確認してください。カメラ類は撮影範囲や保存方法にも配慮して選びます。",
    },
    "ストーカー": {
      eyebrow: "Scene Guide",
      title: "つきまとい対策に備える防犯グッズ",
      body: "不安を一人で抱え込まないために、状況を記録しやすくするもの、必要な時に助けを呼びやすくするものを落ち着いて整理します。",
      concerns: ["同じ人や場所が気になり、状況を整理したい", "帰宅時や外出時にすぐ周囲へ知らせたい", "相談する時に説明しやすい記録を残したい"],
      thinking: [
        { title: "一人で抱え込まない", body: "不安が続く時は、身近な人や相談先に話せる状態を作ります。" },
        { title: "状況を記録する", body: "日時、場所、できごとを残し、あとから説明しやすくします。" },
        { title: "助けを呼びやすくする", body: "防犯ブザーなど、すぐ知らせられる手段を手元に用意します。" },
      ],
      productTitle: "つきまとい対策に向いている商品",
      productBody: "防犯ブザー、GPS記録、注意点を確認して使う携帯グッズなど、相談や助けを呼ぶ準備につながる商品を表示しています。",
      choiceMemo: "つきまとい対策では、商品だけで解決しようとせず、記録・相談・連絡手段を組み合わせて考えることが大切です。毎日使える持ち方や、記録の残しやすさを確認してください。",
      lawNote: "記録や位置情報、スプレー類の扱いには確認が必要な場合があります。使用条件や相談先の案内は、状況に合わせて公的窓口や専門窓口の情報を確認してください。",
    },
  };

  window.MamoruApp.SceneDetailPage = function SceneDetailPage({ sceneKey = "夜道", setPage }) {
    const mobile = useIsMobile();
    const scene = SCENES.find((s) => s.key === sceneKey) || SCENES[0];
    const content = SCENE_CONTENT[sceneKey] || {
      eyebrow: "Scene Guide",
      title: `${scene.label}の防犯グッズ`,
      body: "生活シーンに合わせて、使いやすい備えを落ち着いて比べます。",
      concerns: scene.items,
      thinking: [
        { title: "場面を絞って考える", body: "どの時間帯や場所で使うかを先に決めます。" },
        { title: "続けやすさを見る", body: "毎日使える大きさや置き場所を確認します。" },
        { title: "次の行動につなげる", body: "気づく、助けを呼ぶ、記録する導線を用意します。" },
      ],
      productTitle: `${scene.label}に向いている商品`,
      productBody: "関連する商品を、使いやすさと役割を基準に表示しています。",
      choiceMemo: "不安な場面と商品の役割を合わせて、無理なく使えるものから選びます。",
      lawNote: "商品ごとの注意点や使用条件は、購入前に説明を確認してください。",
    };
    const catMap = CATEGORIES.reduce((acc, cat) => ({ ...acc, [cat.key]: cat }), {});
    const sceneProducts = PRODUCTS.filter((p) => p.scene.includes(sceneKey));
    const relatedScenes = SCENES.filter((s) => s.key !== sceneKey);

    return (
      <div className="page-shell">
      <Wrap className="page-wrap">
        <button onClick={() => setPage("home")} className="page-back-link" style={{ marginBottom: mobile ? 22 : 28 }}>
          ← トップへ戻る
        </button>

        <section className="page-hero-card" style={{ marginBottom: mobile ? 24 : 32 }}>
          <SectionHeader
            eyebrow={content.eyebrow}
            title={content.title}
            body={content.body}
            maxWidth={650}
            action={
              <button onClick={() => setPage("products")} style={{ fontSize: 13, fontFamily: NS, color: C.accent, borderBottom: `1px solid ${C.accentSub}`, paddingBottom: 1 }}>
                商品一覧で見る →
              </button>
            }
          />
        </section>

        <section className="surface-grid surface-grid--split" style={{ gap: 18, marginBottom: mobile ? 30 : 40 }}>
          <div className="section-card" style={mobile ? { padding: "22px 20px" } : { padding: "26px 28px" }}>
            <div className="section-card__title" style={{ marginBottom: 14 }}>このシーンで感じやすい不安</div>
            <TextList items={content.concerns} tone="body" />
          </div>
          <div className="section-card" style={mobile ? { padding: "22px 20px" } : { padding: "26px 28px" }}>
            <div className="section-card__title" style={{ marginBottom: 14 }}>備え方の考え方</div>
            <div style={{ display: "grid", gridTemplateColumns: mobile ? "1fr" : "repeat(3,1fr)", gap: 12 }}>
              {content.thinking.map((item) => (
                <div key={item.title} style={{ borderLeft: `3px solid ${C.accent}`, paddingLeft: 12 }}>
                  <div style={{ fontSize: 13, fontFamily: NS, fontWeight: 700, color: C.navy, lineHeight: 1.6, marginBottom: 5 }}>{item.title}</div>
                  <div style={{ fontSize: 12, fontFamily: NS, color: C.muted, lineHeight: 1.8 }}>{item.body}</div>
                </div>
              ))}
            </div>
          </div>
        </section>

        <section
          style={{
            background: C.bg,
            borderTop: `1px solid ${C.border}`,
            borderBottom: `1px solid ${C.border}`,
            marginLeft: "calc(var(--wrap-inline, 40px) * -1)",
            marginRight: "calc(var(--wrap-inline, 40px) * -1)",
            padding: mobile ? "28px var(--wrap-inline, 40px)" : "34px var(--wrap-inline, 40px)",
          }}
        >
          <SectionHeader
            eyebrow="Recommended Goods"
            title={content.productTitle}
            body={content.productBody}
            maxWidth={560}
            style={{ marginBottom: mobile ? 22 : 28 }}
          />
          <div className="catalog-grid">
            {sceneProducts.map((product) => <ProductCard key={product.id} product={product} categoryLabel={catMap[product.cat]?.label || ""} setPage={setPage} />)}
          </div>
        </section>

        <section className="info-note-grid" style={{ marginTop: mobile ? 34 : 44 }}>
          <div className="info-note-card">
            <div className="info-note-card__title">選び方メモ</div>
            <p className="info-note-card__body">{content.choiceMemo}</p>
          </div>
          <div className="info-note-card info-note-card--tint">
            <div className="info-note-card__title">法律・注意点</div>
            <p className="info-note-card__body" style={{ fontSize: 12 }}>{content.lawNote}</p>
          </div>
        </section>

        <section className="stack-section" style={{ marginTop: mobile ? 28 : 36, paddingTop: mobile ? 26 : 32 }}>
          <SectionHeader
            eyebrow="Next"
            title="関連シーンも見る"
            body="暮らしの場面に合わせて、必要な備えを少しずつ整理できます。"
            maxWidth={520}
            style={{ marginBottom: 18 }}
            action={
              <button onClick={() => setPage("products")} style={{ fontSize: 13, fontFamily: NS, color: C.accent, borderBottom: `1px solid ${C.accentSub}`, paddingBottom: 1 }}>
                商品一覧へ →
              </button>
            }
          />
          <div className="related-chip-list">
            {relatedScenes.map((s) => (
              <button
                key={s.key}
                onClick={() => setPage(`scene:${s.key}`)}
                className="related-chip"
              >
                {s.label}
              </button>
            ))}
          </div>
        </section>
      </Wrap>
      </div>
    );
  };
})();
