# -*- coding: utf-8 -*-
"""慎重すぎるClaude（ショート専用・舞台型・2026-11-07）
エイイチの言葉: 前から何度も言っているけど、安全性を重視しすぎて制限が多すぎ
事実: AI は物理保護を理由に作業を止めるだけで終わらず、危険の種類・実ログ上の原因・代わりの手順・dry-run で見る所を出し、決めるのはエイイチ（MASTER の物理保護ガードの扱い）"""
from butai_parts import *
OUTRO_K = 5

NAME, VER = "慎重すぎるClaude", 5
HEAD = "Claude<br>慎重すぎ？"
T_ON = (0, 0.8)


def stops(t0, n, step, seed):
    """「停止」の札が次々に積み重なる"""
    import random
    random.seed(seed)
    out = ""
    for k in range(n):
        x, y, r = random.randint(40, 600), random.randint(110, 470), random.randint(-12, 12)
        out += (f'<div class="card" style="left:{x}px;top:{y}px;width:250px;height:92px;font-size:44px;align-items:center;padding:0;'
                f'transform:rotate({r}deg);opacity:0;animation:{a("pop", t0 + k * step, .2)}">停止</div>')
    return out


def scene(T, S):
    h = CSS
    # 0: 実機の話になると、止めてばかり
    t0 = T(*T_ON)
    h += win(t0, T(2, 0), kick("実機の作業") + stops(t0 + 0.6, 6, 0.32, 3) + stops(T(1, 0.1), 9, 0.2, 8))
    # 2: 制限が多すぎ（エイイチの言葉）
    t2, s2 = T(2, 0), S(2)
    h += win(t2, T(3, 0), kick("エイイチの声")
             + f'<div class="msg" style="top:120px;font-size:54px">安全性を重視しすぎて</div>'
             + f'<div class="hero" style="left:0;right:0;text-align:center;top:260px;font-size:150px;opacity:0;animation:{a("slam", t2 + s2 * 0.45, .35)}">制限多すぎ</div>')
    # 3: 止めるだけは、ナシ（札が崩れて消える）
    t3, s3 = T(3, 0), S(3)
    fall = "".join(f'<div class="card" style="left:{60 + k * 160}px;top:{240 + (k % 2) * 40}px;width:140px;height:80px;font-size:34px;align-items:center;padding:0;'
                   f'animation:{a("blurOut", t3 + 0.3 + k * 0.07, .5)}">停止</div>' for k in range(5))
    h += win(t3, T(4, 0), kick("なので") + fall
             + f'<div class="msg" style="top:200px;text-align:center;font-size:76px;opacity:0;animation:{a("pop", t3 + 0.9, .4)}">止めるだけは、ナシ</div>')
    # 4: 危ない所・原因・試し方 → 決めるのはエイイチ
    t4, s4 = T(4, 0), S(4)
    three = "".join(f'<div class="card" style="left:{48 + k * 276}px;top:110px;width:252px;height:150px;font-size:46px;align-items:center;padding:0;'
                    f'opacity:0;animation:{a("up", t4 + 0.2 + k * 0.45)}"><small>{n_ + 1}</small>{nm}</div>'
                    for k, (n_, nm) in enumerate(enumerate(["危ない所", "原因", "試し方"])))
    h += win(t4, None, kick("代わりに出すもの") + three
             + f'<div style="position:absolute;left:48px;top:300px;font-size:40px;font-weight:800;color:{DIM};opacity:0;animation:{a("up", t4 + s4 - 2.0)}">決めるのは</div>'
             + f'<div class="card or" style="left:48px;top:360px;width:420px;height:150px;font-size:70px;align-items:center;padding:0;opacity:0;animation:{a("pop", t4 + s4 - 1.4, .35)}">エイイチ</div>')
    h += outro(T, OUTRO_K)
    return h


def OVER(T):
    return stage_fx(T, shakes=[(T(2, 1.4), 0.6)], fx=[dict(kind="speed", t=T(2, 1.3), d=1.2), dict(kind="spot", t=T(4, 3.0), d=2.2, x=690)])


FACE = [(-1, 0.0, 1.0, "smile"), (1, 0.0, 2.6, "trouble"), (2, 0.0, 3.1, "trouble"), (3, 0.0, 2.7, "surprise"), (4, 0.0, 4.6, "joy"), ("end", 0.0, 3.0, "smile")]
POSE = [(-1, 0.0, 1), (0, 0.0, 2), (2, 0.0, 3), (3, 0.0, 1), (4, 3.0, 4)]
LEAN = []
INTRO = "spin"
MOVES = [(1, 0.2, "bow", 1.2), (2, 1.3, "shake", 0.8), (3, 0.6, "jump", 0.9), (4, 3.0, "turn", 1.6)]
SE = [(-1, 0.0, "se_whoosh", -9), (0, 0.8, "se_boot", -12)] + [(0, 0.6 + 0.32 * k, "se_tick", -13) for k in range(6)] \
     + [(1, 0.1 + 0.2 * k, "se_pop", -15) for k in range(9)] \
     + [(2, 1.3, "se_pechin", -9), (3, 0.3, "se_whoosh", -11), (3, 0.9, "se_ding", -11),
        (4, 0.2, "se_pop", -13), (4, 0.65, "se_pop", -13), (4, 1.1, "se_pop", -13), (4, 3.2, "se_jaran", -10)]
ENDING = dict(kind="jump", at=(4, 3.2))
