# -*- coding: utf-8 -*-
"""寝ている間に回す（ショート専用・舞台型・2026-11-06）
エイイチの言葉: 寝ている間も依頼を続けて回せるようにしてほしい（2026-10-27）／長い依頼の途中経過は知りたいが、毎時間は多い。2時間ごとかタスクの区切りでよい（2026-11-05）"""
from butai_parts import *
OUTRO_K = 6   # 締めの文の番号（narration.py の最後に足した文）

NAME, VER = "寝ている間に回す", 3
HEAD = "寝てる間に<br>研究は進む？"
T_ON = (0, 1.2)
HOURS = ["23", "0", "1", "2", "3", "4", "5", "6", "7"]


def night_bar(top=470, ticks=None, t_ticks=None, col=FACE_2, label=True):
    """23時〜7時の帯。ticks: 印を付ける時（HOURS の番号）"""
    w = 804 / 8
    out = f'<div class="card" style="left:48px;top:{top}px;width:804px;height:26px;padding:0;border-radius:13px;background:{FACE_C}"></div>'
    if label:
        out += "".join(f'<div style="position:absolute;left:{48 + k * w - 30:.0f}px;top:{top + 34}px;width:60px;text-align:center;font-size:22px;font-weight:800;color:{DIM}">{hh}時</div>'
                       for k, hh in enumerate(HOURS) if k % 2 == 0)
    for j, k in enumerate(ticks or []):
        an = f"opacity:0;animation:{a('pop', t_ticks + j * 0.12, .2)}" if t_ticks is not None else ""
        out += f'<div style="position:absolute;left:{48 + k * w - 10:.0f}px;top:{top - 22}px;width:20px;height:70px;border-radius:6px;background:{col};{an}"></div>'
    return out


def scene(T, S):
    h = CSS
    # 0: 寝てる間も進めたい（夜の帯）
    t0 = T(0, 1.2)
    h += win(t0, T(1, 0), kick("夜") + '<div class="msg" style="font-size:64px">寝ている間</div>' + night_bar(330))
    # 1: 夜は Claude Code が回す（帯の上を再生ヘッドが進む）
    t1, s1 = T(1, 0), S(1)
    h += win(t1, T(2, 0), kick("夜は") + '<div class="msg" style="font-size:64px">Claude Code が回す</div>' + night_bar(330)
             + "<style>@keyframes nh { from { left:48px; } to { left:844px; } }</style>"
             + f'<div style="position:absolute;top:300px;width:8px;height:90px;border-radius:4px;background:{ORANGE};left:48px;animation:nh {s1 + 0.4:.2f}s linear {t1 + 0.2:.3f}s forwards"></div>')
    # 2: クラウドの GPU で学習して、片付けまで
    t2, s2 = T(2, 0), S(2)
    st = "".join(f'<div class="card" style="left:{48 + k * 205}px;top:260px;width:189px;height:190px;font-size:34px;white-space:nowrap;animation:{a("on", t2 + 0.3 + k * (s2 - 0.6) / 3, .25)}">'
                 f'<small>{k + 1}</small>{nm}</div>' for k, nm in enumerate(["借りる", "学習", "持ち帰る", "片付け"]))
    h += win(t2, T(3, 0), kick("1つめ　クラウドの GPU") + st)
    # 3: Unity の店を、条件を変えて何十回も（マスが埋まる）
    t3, s3 = T(3, 0), S(3)
    cells = ""
    for k in range(60):
        r_, c_ = divmod(k, 12)
        cells += (f'<div style="position:absolute;left:{48 + c_ * 67}px;top:{170 + r_ * 66}px;width:58px;height:56px;border-radius:8px;background:{FACE_C};'
                  f'animation:{a("on", t3 + 0.3 + k * (s3 - 0.6) / 60, .12)}"></div>')
    h += win(t3, T(4, 0), kick("2つめ　Unity の店（条件 × 回数）") + cells)
    # 4: 途中経過は知りたい。でも毎時間は多い（帯に毎時の印が並ぶ）
    t4, s4 = T(4, 0), S(4)
    h += win(t4, T(5, 0), kick("途中経過のお知らせ") + '<div class="msg" style="font-size:56px">毎時間は、多い</div>'
             + night_bar(380, ticks=list(range(9)), t_ticks=t4 + 0.3, col="#5C6678")
             + f'<div class="strike" style="left:40px;width:820px;top:388px;animation:{a("strike", t4 + s4 - 1.0, .35)}"></div>')
    # 5: 2時間ごとか、区切りで
    t5 = T(5, 0)
    h += win(t5, None, kick("これから") + '<div class="msg" style="font-size:56px">2時間ごと、か区切りで</div>'
             + night_bar(380, ticks=[0, 2, 4, 6, 8], t_ticks=t5 + 0.4, col=ORANGE))
    h += outro(T, OUTRO_K)   # 締め：サイトへの入口
    return h


def OVER(T):
    return stage_fx(T, fx=[dict(kind="stars", t=T(0, 0.6), d=T(4, 0) - T(0, 0.6)), dict(kind="shock", t=T(5, 0.4), d=1.6)])


FACE = [(-1, 0.0, 1.0, "smile"), (1, 0.0, 2.3, "wink"), (2, 0.0, 3.6, "base"), (3, 0.0, 3.9, "joy"), (4, 0.0, 3.9, "think"), (5, 0.0, 3.0, "smile"), ("end", 0.0, 3.0, "smile")]
POSE = [(-1, 0.0, 2), (2, 0.0, 2), (4, 0.0, 1), (5, 0.4, 4)]
LEAN = []
INTRO = "drop"
MOVES = [(1, 0.3, "spin", 1.0), (3, 0.5, "hop", 1.4), (5, 0.4, "bow", 1.2)]
SE = [(-1, 0.0, "se_rise", -10), (0, 1.2, "se_boot", -12), (1, 0.0, "se_whoosh", -12), (2, 0.0, "se_whoosh", -12),
      (2, 0.3, "se_tick", -12), (2, 1.3, "se_tick", -12), (2, 2.3, "se_tick", -12), (2, 3.2, "se_tick", -12),
      (3, 0.0, "se_whoosh", -12), (3, 3.4, "se_ding", -11), (4, 0.0, "se_whoosh", -12), (4, 0.3, "se_buzz", -14),
      (5, 0.0, "se_whoosh", -12), (5, 0.4, "se_ding", -9)]
ENDING = dict(kind="jump", at=(5, 0.4))
