#!/usr/bin/env python3
import hashlib
import json
import sys
from datetime import datetime, timezone
from pathlib import Path

PROJECT = Path(__file__).resolve().parents[1]
PROMOTION = PROJECT / "story/promotion-report.json"
BRIEF = PROJECT / "script/story-brief.json"
IDENTITY = PROJECT / "script/identity-registry.json"
REVEAL = PROJECT / "script/reveal-ledger.json"
OUTPUT = PROJECT / "image/image-brief.json"


def sha(path):
    return hashlib.sha256(path.read_bytes()).hexdigest()


def main():
    for path in (PROMOTION, BRIEF, IDENTITY, REVEAL):
        if not path.is_file():
            raise RuntimeError(f"missing {path}")
    promotion = json.loads(PROMOTION.read_text(encoding="utf-8"))
    brief = json.loads(BRIEF.read_text(encoding="utf-8"))
    identity = json.loads(IDENTITY.read_text(encoding="utf-8"))
    reveal = json.loads(REVEAL.read_text(encoding="utf-8"))
    if promotion.get("verified") is not True or identity.get("verified") is not True or reveal.get("verified") is not True:
        raise RuntimeError("image authority not verified")
    title = brief["canonical_title"]
    output = {
        "version": 1, "verified": True, "project_id": "011",
        "source_canon_sha256": promotion["spoken_sha256"], "canonical_title": title,
        "world": "Kho đồ thất lạc trong bến phà Thanh Dữ hư cấu tại Hàng Châu, đêm mưa cuối mùa, kệ gỗ cũ, cửa kính mờ sương, ánh đèn hổ phách và phản chiếu xanh rêu.",
        "protagonist": "Tạ Vãn Thu, nữ 28 tuổi, người Trung Quốc hư cấu, tóc đen dài buộc thấp, áo khoác xanh rêu, bình tĩnh nhưng kiên quyết, tay giữ chìa khóa đồng của kho.",
        "supporting_cast": ["Cố Trầm Chu, nam 31 tuổi, áo khoác than chì, vẻ điềm tĩnh và day dứt, đứng đối diện nhưng không áp chế", "Chiếc vali đỏ khóa đồng và máy cassette màu hổ phách là vật chứng trung tâm"],
        "motifs": brief["motifs"], "palette": "đỏ rượu vang, xanh rêu, than chì, hổ phách ấm, sương xanh lạnh",
        "reveal_limit": reveal["poster_reveal_limit"],
        "negative_constraints": ["không người thật hoặc người nổi tiếng", "không logo thật", "không QR", "không lộ chủ nhân vali", "không lộ bản ghi cuối", "không watermark", "không text ngoài các khối bắt buộc"],
        "assets": {
            "intro_poster": {"orientation": "16:9", "composition": "Vãn Thu và Trầm Chu hai phía chiếc vali đỏ trong kho bến phà, khoảng cách căng thẳng nhưng không đối đầu bạo lực; cinematic key art.", "required_text": [title, "TRUYỆN AUDIO FULL", "HUYỀN AN AUDIO"]},
            "right_panel": {"orientation": "vertical", "composition": "Cận cảnh Vãn Thu, chiếc vali đỏ và dải băng cassette trong kho bến phà; hierarchy dọc rõ, mặt không bị chữ che.", "required_text": [title, "TRUYỆN AUDIO FULL", "HUYỀN AN AUDIO"]},
            "left_panel": {"orientation": "vertical", "composition": "Panel branding độc lập không nhân vật: phòng phát thanh bến phà trừu tượng, kính mờ sương, đèn on-air đỏ dịu, sóng âm hổ phách.", "required_text": ["HUYỀN AN AUDIO", "Like • Chia sẻ • Đăng ký"]}
        },
        "authority_hashes": {"story_brief": sha(BRIEF), "identity_registry": sha(IDENTITY), "reveal_ledger": sha(REVEAL)},
        "created_at": datetime.now(timezone.utc).isoformat(),
    }
    OUTPUT.write_text(json.dumps(output, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")
    print(json.dumps({"verified": True, "output": str(OUTPUT), "source_canon_sha256": output["source_canon_sha256"]}, ensure_ascii=False))
    return 0


if __name__ == "__main__":
    try:
        sys.exit(main())
    except Exception as exc:
        print(f"Image brief blocked: {exc}", file=sys.stderr)
        sys.exit(1)
