#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""apply_formal.py — 生成「正式版」角色/妖怪设定提示词：风格改为参考片
《黑神话悟空 大圣战歌〈云宫迅音〉》(BV148sge8E8T) 的电影写实国风，**角色造型直接复刻 86 版那套**。

做法：以 prompts/02-人物设定.json、03-妖怪设定.json（86 版经典造型）为底，
把「水墨动画/宣纸/飞白/淡彩」等风格词换成「黑神话式电影质感」词，再前置风格锚点。
输出：prompts/01-风格测试-正式版.json、02-人物设定-正式版.json、03-妖怪设定-正式版.json
"""
import json, os, re

ROOT = os.path.dirname(os.path.abspath(__file__))
os.chdir(ROOT)

ANCHOR = ("《黑神话：悟空》式的中国神话史诗电影质感：半写实厚涂，电影级戏剧性光影（侧逆光、体积光、边缘光），"
          "深墨绿／赭红／暗金主调，水墨与岩彩融合的厚重肌理，做旧颗粒与胶片质感，庄重肃杀，极高细节。"
          "造型严格保留央视1986年版《西游记》经典影视形象的可识别特征：戏曲脸谱化妆容、传统盔甲与戏服、扎实道具质感。")

TAIL = "　光影厚重、构图庄重，无文字，无多余元素，极高细节。"

SUBS = [
    (r"中国水墨动画风格，宣纸质感，写意留白，?", ""),
    (r"水墨动画风格，宣纸质感，写意留白，?", ""),
    (r"纯色米黄宣纸背景，无多余元素。?", "暗色水墨山石与云海虚化的背景。"),
    (r"纯色米黄宣纸背景。?", "暗色水墨山石与云海虚化的背景。"),
    (r"墨色浓淡晕染，?", "厚重水墨与岩彩肌理，"),
    (r"墨色与?[^，。]*晕染，?", "厚重水墨与岩彩肌理，"),
    (r"衣纹飞白笔触，?", ""),
    (r"衣纹与[^，。]*以飞白笔触表现，?", ""),
    (r"淡彩设色，?", "暗调厚涂上色，"),
    (r"国风动画长片质感，?", ""),
    (r"国风动画质感，?", ""),
    (r"国风水墨插画，?", ""),
    (r"，?高细节。?$", "。"),
    (r"造型要点：[^。]*。", ""),
    (r"造型严格参照央视1986年版电视剧《西游记》的经典影视形象：[^。]*。", ""),
]


def transform(prompt):
    p = prompt
    for pat, rep in SUBS:
        p = re.sub(pat, rep, p)
    p = re.sub(r"^[。，\s]+", "", p)
    p = re.sub(r"[，。]{2,}", "，", p).strip("，。 ") + "。"
    return ANCHOR + p + TAIL


def run(src, outdir, out, scene=False):
    items = json.load(open(src, encoding="utf-8"))
    res = []
    for it in items:
        res.append({"outdir": outdir, "name": it["name"].replace("可爱版-", ""),
                    "ratio": it["ratio"], "prompt": transform(it["prompt"])})
    json.dump(res, open(out, "w", encoding="utf-8"), ensure_ascii=False, indent=1)
    print(f"{out}: {len(res)} 条（平均 {sum(len(x['prompt']) for x in res)//len(res)} 字）")


run("prompts/02-人物设定.json", "02-人物设定-正式版", "prompts/02-人物设定-正式版.json")
run("prompts/03-妖怪设定.json", "03-妖怪设定-正式版", "prompts/03-妖怪设定-正式版.json")
run("prompts/04-场景设定.json", "04-场景设定-正式版", "prompts/04-场景设定-正式版.json")

# 风格测试三版（同一主体：齐天大圣立于墨色风暴中）
SUBJ = ("齐天大圣孙悟空：猴王相貌，火眼金睛赤金瞳，赭红脸膛，凤翅紫金冠插两根雉鸡翎，"
        "赤金锁子甲外罩赭红战袍，腰系虎皮短裙，手持如意金箍棒，立于墨色翻涌的山巅风暴之中。")
tests = [
    ("正式版-风格A-电影写实厚涂", ANCHOR + SUBJ + "电影级中景，强烈侧逆光，墨色云层压顶，金粉与飞灰在光柱中飘浮，气势磅礴。" + TAIL),
    ("正式版-风格B-水墨重彩长卷", "中国神话电影水墨长卷风格：《黑神话：悟空》式的水墨与岩彩融合，浓墨山峦与云海翻卷，赭红暗金点染，"
     "大气磅礴，做旧绢本质感，极高细节。造型保留央视1986年版《西游记》孙悟空的可识别特征（脸谱化猴王、凤翅紫金冠、虎皮短裙、金箍棒）。"
     + SUBJ + "宽幅电影级构图，大量墨色留白，庄严肃杀。" + TAIL),
    ("正式版-风格C-暗金戏剧光", "中国神话史诗电影风格：暗调背景，强烈金色背光与体积光，火星与金粉飞舞，高对比，"
     "厚涂写实质感，胶片颗粒，肃杀燃向。造型保留央视1986年版《西游记》孙悟空的可识别特征（脸谱化猴王、凤翅紫金冠、虎皮短裙、金箍棒）。"
     + SUBJ + "低角度仰拍，金箍棒迸发金焰。" + TAIL),
]
json.dump([{"outdir": "01-风格测试-正式版", "name": n, "ratio": "16:9", "prompt": p} for n, p in tests],
          open("prompts/01-风格测试-正式版.json", "w", encoding="utf-8"), ensure_ascii=False, indent=1)
print("prompts/01-风格测试-正式版.json: 3 条")
