#!/usr/bin/env python3
"""Fix 图片描述 for 021301-021801: add 【Notice Type】 labels per reference format"""
import json, requests, time, sys

CRED = "/root/.openclaw/credentials/xiaoyan/config.json"
TOKEN_APP = "CMHSbUUjka3TrUsaxxEc297ongf"
TBL = "tblCgfYDnnqwLfgH"

with open(CRED) as f:
    cred = json.load(f)
aid = cred["apps"][0]["appId"]
asecret = cred["apps"][0]["appSecret"]

def get_token():
    r = requests.post("https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal",
                      json={"app_id": aid, "app_secret": asecret})
    return r.json()["tenant_access_token"]

# New descriptions with 【Type】 labels
# Format: 图片材料文本：\n【Type】\nText content
NEW_DESC = {
    "021301": """1.
图片材料文本：
【Show Poster】
The ACTOR is on stage.

图片材料文本：
【Wanted Notice】
Man with black BEARD wanted.

图片材料文本：
【Art Label】
These pictures are DIFFERENT.

图片材料文本：
【Award Certificate】
Lily was very BRAVE today.

图片材料文本：
【Greeting Card】
A new NEIGHBOUR moved in.

2.
图片材料文本：
【Family Note】
DINNER at six tonight.

图片材料文本：
【Door Sign】
Mum is COOKING right now.

图片材料文本：
【Fire Exit Sign】
FIRE exit this way →

图片材料文本：
【Event Poster】
Family ALBUM on show Friday.

图片材料文本：
【Personal Note】
Do not read my DIARY.""",

    "021401": """1.
图片材料文本：
【Planning Note】
PLAN your weekend now.

图片材料文本：
【Shop Sign】
Bike REPAIR in one hour.

图片材料文本：
【Library Sign】
Today's NEWSPAPER on the desk.

图片材料文本：
【Lost & Found】
Lost: Blue BACKPACK in Room 3.

图片材料文本：
【Bus Sign】
Give your SEAT to old people.

2.
图片材料文本：
【School Notice】
School GARDEN open after class.

图片材料文本：
【Market Sign】
Sweet MELON for sale today.

图片材料文本：
【Warning Sign】
Do not drink lake WATER.

图片材料文本：
【School Notice】
PLANT a tree on Friday.

图片材料文本：
【School Notice】
SUMMER camp starts next week.""",

    "021501": """1.
图片材料文本：
【School Sign】
VISITORs sign in at the office.

图片材料文本：
【Party Banner】
WELCOME to the birthday party!

图片材料文本：
【Party Invitation】
You are INVITEd to Tom's party.

图片材料文本：
【Event Poster】
Come and LAUGH with us!

图片材料文本：
【Hotel Notice】
GUESTs: breakfast 7 to 9 a.m.

2.
图片材料文本：
【Homework Reminder】
Check for MISTAKEs first.

图片材料文本：
【Exam Notice】
Read the INSTRUCTION carefully.

图片材料文本：
【Office Notice】
Give a REASON if late.

图片材料文本：
【Room Sign】
No drinks near TECHNOLOGY room.

图片材料文本：
【Art Room Sign】
Wash your paint BRUSH here.""",

    "021601": """1.
图片材料文本：
【Sports Notice】
New school RECORD in jump!

图片材料文本：
【School Notice】
Sports day — a big EVENT.

图片材料文本：
【Door Sign】
Do not ENTER without teacher.

图片材料文本：
【Library Notice】
RETURN books by this Friday.

图片材料文本：
【Recycling Sign】
Please SORT paper and glass.

2.
图片材料文本：
【Lost & Found】
Lost: red HANDBAG near playground.

图片材料文本：
【No Photo Sign】
No CAMERA in this room.

图片材料文本：
【Park Sign】
Park GATE closes at eight.

图片材料文本：
【Shop Sign】
Fix your WHEEL in 30 minutes.

图片材料文本：
【Building Sign】
Main ENTRANCE on north side.""",

    "021701": """1.
图片材料文本：
【Bus Sign】
Do not talk to the DRIVER.

图片材料文本：
【Safety Poster】
Look both ways on the STREET.

图片材料文本：
【Market Sign】
Farmers' MARKET every Saturday.

图片材料文本：
【Information Desk】
Free GUIDEBOOK at this desk.

图片材料文本：
【Mall Sign】
SHOPPING hours: 10 a.m. to 8 p.m.

2.
图片材料文本：
【Laundry Sign】
Washing MACHINE on first floor.

图片材料文本：
【Art Club Notice】
DRAW your family for the show.

图片材料文本：
【Sports Notice】
BASKETBALL practice at four today.

图片材料文本：
【Library Sign】
Put books on the BOOKCASE.

图片材料文本：
【Science Fair Sign】
Show your INVENTION on Monday.""",

    "021801": """1.
图片材料文本：
【Library Notice】
LIBRARY open 8 a.m. to 4 p.m.

图片材料文本：
【Reading Room Sign】
New MAGAZINEs — read here only.

图片材料文本：
【TV Room Sign】
CARTOON at three this afternoon.

图片材料文本：
【Exam Notice】
English TEST on Friday morning.

图片材料文本：
【Lab Sign】
Read CAREFULLY before you start.

2.
图片材料文本：
【Toy Label】
This toy needs a new BATTERY.

图片材料文本：
【Library Sign】
Reading CORNER on the left side.

图片材料文本：
【School Notice】
Play at the THEATRE this Saturday.

图片材料文本：
【Park Sign】
Do not CLIMB the park trees.

图片材料文本：
【Canteen Notice】
Lunch is at MIDDAY today.""",
}

# Step 1: Get current records & record_ids
token = get_token()
r = requests.get(
    f"https://open.feishu.cn/open-apis/bitable/v1/apps/{TOKEN_APP}/tables/{TBL}/records",
    headers={"Authorization": f"Bearer {token}"},
    params={"page_size": 50})

records = {}
for item in r.json().get("data", {}).get("items", []):
    fid = item["fields"].get("题目集合 ID", "")
    if fid in NEW_DESC:
        records[fid] = item["record_id"]

print(f"Found {len(records)} records to update")

# Step 2: Update 图片描述
print("=== Updating 图片描述 ===")
for qid in sorted(NEW_DESC):
    if qid not in records:
        print(f"  ❌ {qid}: record not found")
        continue
    rid = records[qid]
    desc = NEW_DESC[qid]
    r = requests.put(
        f"https://open.feishu.cn/open-apis/bitable/v1/apps/{TOKEN_APP}/tables/{TBL}/records/{rid}",
        headers={"Authorization": f"Bearer {token}", "Content-Type": "application/json"},
        json={"fields": {"图片描述": desc}})
    code = r.json().get("code")
    print(f"  {qid} ({rid}): code={code} len={len(desc)}chars")
    time.sleep(0.5)

# Step 3: Wait then verify
print("\n=== Step 3: Wait 5s + Verify ===")
time.sleep(5)
token = get_token()

all_ok = True
for qid in sorted(NEW_DESC):
    rid = records.get(qid)
    if not rid:
        continue
    r = requests.get(
        f"https://open.feishu.cn/open-apis/bitable/v1/apps/{TOKEN_APP}/tables/{TBL}/records/{rid}",
        headers={"Authorization": f"Bearer {token}"})
    fields = r.json()["data"]["record"]["fields"]
    desc = fields.get("图片描述", "") or ""
    
    # Check: contains 【 and has expected structure
    has_labels = "【" in desc
    has_text = "图片材料文本" in desc
    ok = has_labels and has_text and len(desc) > 200
    
    # Count 【 occurrences - should be 10 (one per image)
    bracket_count = desc.count("【")
    desc_ok = bracket_count == 10
    
    status = "✅" if (ok and desc_ok) else "❌"
    if not ok or not desc_ok:
        all_ok = False
    print(f"  {status} {qid}: labels={bracket_count}/10 char={len(desc)}")
    
    # Show first 2 entries as sample
    if has_labels:
        lines = desc.strip().split("\n")
        for i, line in enumerate(lines):
            if "【" in line:
                print(f"       {line}")

print(f"\n{'✅ All OK' if all_ok else '❌ Some checks failed'}")
