# -*- coding: utf-8 -*-
"""このショートの作り方（ショート専用・舞台型・2026-11-06）
エイイチの言葉: 動画づくりで一番時間を取られるのは音声確認（2026-11-02）。部屋は依頼箱 #99 で Claude Code が Unity で建てた（22:46 開始 → 22:59 完了＝13分）"""
from butai_parts import *
OUTRO_K = 6   # 締めの文の番号（narration.py の最後に足した文）

NAME, VER = "このショートの作り方", 3
HEAD = "この動画<br>誰が作った？"
T_ON = (0, 1.0)
STEPS = ["台本", "画面", "部屋", "声", "決める"]


def pipe(done, now=(), t=None):
    """下の段に5つの工程。done はもうオレンジ、now は t で灯す"""
    out = ""
    for k, nm in enumerate(STEPS):
        st = f"background:{ORANGE};color:#fff;" if k in done else ""
        an = f"animation:{a('on', t, .25)};" if (k in now and t is not None) else ""
        out += (f'<div class="card" style="left:{48 + k * 164}px;top:450px;width:148px;height:96px;font-size:32px;align-items:center;padding:0;{st}{an}">{nm}</div>')
    return out


def wave(t0, left=48, top=150, w=804, h=220, n=36, dim=False):
    import random
    random.seed(3)
    bw = w / n
    out = "<style>@keyframes wv { 0%,100% { transform:scaleY(.25); } 50% { transform:scaleY(1); } }</style>"
    for k in range(n):
        d = random.uniform(.35, .8)
        out += (f'<div style="position:absolute;left:{left + k * bw + 3:.0f}px;top:{top}px;width:{bw - 6:.0f}px;height:{h}px;border-radius:6px;'
                f'background:{FACE_2 if dim else ORANGE};transform:scaleY(.25);animation:wv {d:.2f}s ease-in-out {t0 + random.uniform(0, .4):.3f}s infinite"></div>')
    return out


def scene(T, S):
    h = CSS
    # 0: どうやって作ってる？
    h += win(T(0, 1.0), T(1, 0), f'<div class="qm" style="top:20px;font-size:380px;animation:breathe .9s ease-in-out {T(0, 1.05):.3f}s 2">?</div>')
    # 1: 台本と画面は Claude
    t1 = T(1, 0)
    h += win(t1, T(2, 0), kick("台本と画面") + '<div class="msg" style="font-size:96px;top:150px">Claude</div>' + pipe([], [0, 1], t1 + 0.6))
    # 2: この部屋は Claude Code が Unity で建てた（13分）
    t2 = T(2, 0)
    h += win(t2, T(3, 0), kick("この部屋（Claude Code × Unity）")
             + f'<div class="hero" style="left:48px;top:130px;font-size:240px"><b id="m13" style="font-weight:900">0</b><span>分で建った</span></div>'
             + counter_js("m13", t2 + 0.4, t2 + 2.4, 13, 0) + pipe([0, 1], [2], t2 + 0.6))
    # 3: 声は ElevenLabs（波形が動く）
    t3 = T(3, 0)
    h += win(t3, T(4, 0), kick("声は ElevenLabs") + wave(t3 + 0.2, top=130, h=260) + pipe([0, 1, 2], [3], t3 + 0.5))
    # 4: いちばん時間がかかるのは、音声の確認（波形の上を再生ヘッドが何度も往復）
    t4, s4 = T(4, 0), S(4)
    h += win(t4, T(5, 0), kick("いちばん時間がかかる") + wave(t4, top=130, h=200, dim=True)
             + "<style>@keyframes ph { 0% { left:48px; } 100% { left:844px; } }</style>"
             + f'<div style="position:absolute;top:110px;width:8px;height:240px;border-radius:4px;background:{INK};left:48px;animation:ph .9s linear {t4 + 0.3:.3f}s infinite"></div>'
             + f'<div class="stamp" style="left:250px;top:330px;font-size:60px;animation:{a("slam", t4 + s4 - 1.4)}">音声の確認</div>')
    # 5: 見て決めるのは、エイイチさん
    t5 = T(5, 0)
    h += win(t5, None, kick("見て決めるのは")
             + f'<div class="msg" style="font-size:110px;top:150px;opacity:0;animation:{a("pop", t5 + 0.3, .35)}">エイイチ</div>' + pipe([0, 1, 2, 3], [4], t5 + 0.3))
    h += outro(T, OUTRO_K)   # 締め：サイトへの入口
    return h


def OVER(T):
    return stage_fx(T, bursts=[(T(5, 0.3), 200)])


FACE = [(-1, 0.0, 1.0, "joy"), (1, 0.0, 3.3, "joy"), (2, 0.0, 3.5, "smile"), (3, 0.0, 3.6, "wink"), (4, 0.0, 3.0, "trouble"), ("end", 0.0, 3.0, "joy")]
POSE = [(-1, 0.0, 1), (2, 1.5, 3), (3, 0.0, 2), (4, 0.0, 2), (5, 0.3, 4)]
LEAN = []
INTRO = "hop"
MOVES = [(1, 0.2, "jump", 1.0), (2, 0.5, "turn", 1.6), (3, 0.3, "tilt", 1.2), (5, 0.3, "bow", 1.2)]
SE = [(-1, 0.0, "se_rise", -9), (0, 1.0, "se_boot", -12), (1, 0.0, "se_whoosh", -12), (1, 0.6, "se_ding", -11),
      (2, 0.0, "se_whoosh", -12), (2, 2.4, "se_ding", -10), (3, 0.0, "se_whoosh", -12), (4, 0.0, "se_whoosh", -12),
      (4, 1.4, "se_pechin", -9), (5, 0.3, "se_jaran", -10), (5, 0.3, "se_ding", -9)]
ENDING = dict(kind="jump", at=(6, 0.9))   # 2026-11-07 跳ねると頭が工程の「声」にかかるので、締め（サイトの入口）で跳ねる
