import openpyxl
from openpyxl.styles import Font, Alignment
from copy import copy

wb = openpyxl.Workbook()
ws = wb.active
ws.title = "第3幕剧本"

# Column widths
ws.column_dimensions['A'].width = 18
ws.column_dimensions['B'].width = 60
ws.column_dimensions['C'].width = 12
ws.column_dimensions['D'].width = 45

# Header
headers = ["类型", "剧情描述", "名字", "台词"]
header_font = Font(bold=True, size=11)
for col, h in enumerate(headers, 1):
    cell = ws.cell(row=1, column=col, value=h)
    cell.font = header_font
    cell.alignment = Alignment(horizontal='center', vertical='center')

# Script data - each row is [type, description, name, dialogue]
# Bold markers: **word** = knowledge point input (bold)
# <red>**word**</red> = User output (bold + red)
# We'll handle rich text formatting

rows = [
    ["TL", "【场景】教学楼大厅\n【角色】User、Kim、Matt、BoBo", "", ""],
    ["", "User、Kim、Matt走进教学楼大厅。BoBo跟在User脚边，小幅度晃动，明显还在兴奋。", "", ""],
    ["", "", "Kim", "So! We need people to come watch!"],
    ["", "", "Matt", "But how?"],
    ["", "", "Kim", "We make a poster!"],
    ["", "", "Matt", "Good idea. We write what and where."],
    ["", "", "Matt", "The battle is at the playground, right?"],
    ["", "", "Kim", "Yes! But what do we write?"],
    ["", "Kim转向User。", "", ""],
    ["", "", "Kim", "Hey! Where is the battle?"],
    ["中互动", "", "User", "The playground!"],
    ["TL", "BoBo突然蹦起来，发出兴奋的"Bzzz Bzzz!"声响，在原地转了一圈。\n【音效】Bzzz机械振动声", "", ""],
    ["", "", "BoBo", "Bzzz! Me too! Me too!"],
    ["", "", "Kim", "Ha! Your little robot wants to join!"],
    ["", "", "Kim", "It looks like fun to BoBo too!"],
    ["", "", "BoBo", "Bzzz! Fun! Fun!"],
    ["", "User蹲下来，认真地看着BoBo。", "", ""],
    ["", "", "User", "BoBo. Listen."],
    ["", "", "User", "If a teacher sees you..."],
    ["", "", "Matt", "You will be taken away."],
    ["中互动", "", "User", "No BoBo. This is no fun for you!"],
    ["TL", "BoBo垂下头，委屈地缩小身体，安静蹲在User脚边。但还是忍不住微微晃动。", "", ""],
    ["", "", "Kim", "Just stay quiet, okay?"],
    ["", "Matt掏出纸和笔，摊在大厅的长椅上。", "", ""],
    ["", "", "Matt", "Okay. Let's write the poster."],
    ["", "", "Matt", "We need to tell people what to see."],
    ["", "", "Kim", "It's our class against May's class!"],
    ["", "", "Matt", "Chinese dragon versus English dragon."],
    ["", "", "Kim", "People love fun! Write that!"],
    ["", "", "Matt", "And where? The playground!"],
    ["", "BoBo在旁边小声嗡嗡，像在提意见。", "", ""],
    ["", "", "BoBo", "Bzzz... big... Bzzz... dragon..."],
    ["", "", "Kim", "Shh! We know, BoBo."],
    ["", "Matt把纸递给User。", "", ""],
    ["", "", "Matt", "Here. You write it. Fill in the blanks."],
    ["", "【教研图】传单模板——上方画着两条龙对峙的简笔画（一条中国龙、一条西方龙），下方有四行空格待填写", "", ""],
    ["核心互动-拼写写作", "User填写传单内容：\n① Come and have ______!（fun）\n② ______ class vs ______ class（our / May's，触发Class）\n③ Chinese dragon vs ______ dragon（English）\n④ At the ______!（playground）", "User", "（填写：fun / our class / May's class / English / playground）"],
    ["TL", "传单写好了。Kim拿起来看，满意地点头。Matt检查了一遍拼写。\n【插入图】完成的传单特写——歪歪扭扭但热情洋溢的手写字", "", ""],
    ["", "", "Kim", "Yes! This is great!"],
    ["", "", "Matt", "Now we need one more thing."],
    ["", "", "Matt", "A judge."],
    ["", "", "Kim", "A judge?"],
    ["", "", "Matt", "Yes. Someone to see who is the winner."],
    ["", "", "Kim", "Hmm... who is fair?"],
    ["", "Kim正想着，大厅另一头传来脚步声。Sally老师背着包走进来，低头看手机，准备下班。", "", ""],
    ["", "", "Kim", "Oh! Look!"],
    ["", "【emoji】Kim emoji_surprise", "", ""],
    ["", "", "Kim", "Sally! Over here! Over here!"],
    ["中互动", "", "User", "Over here, Sally!"],
    ["TL", "Sally抬头，看到这群小孩冲她招手，一脸"跟我没关系"的表情走过来。", "", ""],
    ["", "", "Sally", "What?"],
    ["", "", "Kim", "We need a judge!"],
    ["", "", "Sally", "A judge?"],
    ["", "", "Matt", "Yes! To see who is the winner."],
    ["", "", "Matt", "You are the best judge!"],
    ["", "Sally看了一眼传单，嘴角微翘，但立刻恢复面无表情。", "", ""],
    ["", "", "Sally", "No. I'm going home."],
    ["", "", "Kim", "Please! Just one battle!"],
    ["", "", "Sally", "Find someone else."],
    ["", "BoBo听到"老师"，立刻缩成一团躲到User背后，从此不再出现。", "", ""],
    ["", "", "Matt", "Just have fun with us for a bit!"],
    ["", "", "Kim", "It will be so much fun!"],
    ["", "", "Sally", "No."],
    ["", "User把传单举到Sally面前。", "", ""],
    ["中互动", "", "User", "Have fun with us!"],
    ["TL", "Sally盯着传单看了三秒。叹了口气。", "", ""],
    ["", "", "Sally", "...Fine. ONE battle."],
    ["", "", "Sally", "Then I go home."],
    ["", "【emoji】Kim emoji_celebrate", "", ""],
    ["", "", "Kim", "Yes!"],
    ["", "", "Matt", "Thank you Sally!"],
    ["", "Kim抢过传单。", "", ""],
    ["", "", "Kim", "I'll go tell everyone!"],
    ["", "", "Matt", "Good. You go. We bring Sally to the battle."],
    ["", "Kim跑出大厅去发传单。Sally无奈地跟着User和Matt往外走。", "", ""],
    ["", "", "Sally", "So... the playground?"],
    ["中互动", "", "User", "Yes! The playground! Over here!"],
    ["TL", "User带着Sally和Matt朝操场方向走去。远处，操场上两条龙的轮廓隐约可见。", "", ""],
]

# Bold font for knowledge point input
bold_font = Font(bold=True, size=10)
# Red bold font for User output
red_bold_font = Font(bold=True, color="F54A45", size=10)
normal_font = Font(size=10)
wrap_align = Alignment(wrap_text=True, vertical='top')

# Knowledge point words to bold in NPC lines
kp_input_words = ["playground", "class", "English", "fun", "Over here", "have fun with"]
# Knowledge point words to red-bold in User lines
kp_output_words = ["playground", "no fun", "Over here", "Have fun with"]

for i, row_data in enumerate(rows, 2):
    for col, val in enumerate(row_data, 1):
        cell = ws.cell(row=i, column=col, value=val)
        cell.font = normal_font
        cell.alignment = wrap_align

# Set row height for description rows
for row in ws.iter_rows(min_row=2, max_row=ws.max_row):
    if row[1].value and '\n' in str(row[1].value):
        ws.row_dimensions[row[0].row].height = 40

output_path = "/root/.openclaw/workspace-xiaobian/output/U18_L5_Act3_draft.xlsx"
wb.save(output_path)
print(f"Saved to {output_path}")
