# Cruza tags de POSE del WD14 (549 imgs) contra pose_bank + pose.txt.
# Lista candidatos a pool de poses con frecuencia y si ya existen.

import json, pathlib, re
from collections import Counter

BASE = pathlib.Path(r"C:\Users\Usuario\Downloads\SD")
OUT = BASE / "Archivos" / "wd14" / "tags" / "pawchive"
data = {}
data.update(json.loads((OUT / "scores.json").read_text(encoding="utf-8")))
purah = json.loads((OUT / "purah" / "scores.json").read_text(encoding="utf-8"))
for k, v in purah.items():
    data["Purah/" + k] = v

# Vocabulario de poses (Danbooru general)
POSE = {
 "standing", "sitting", "lying", "kneeling", "bending_over", "bent_over", "leaning_forward",
 "leaning_back", "leaning_to_the_side", "leaning_on_something", "all_fours", "on_all_fours",
 "on_stomach", "on_back", "lying_on_back", "lying_on_stomach", "lying_on_side", "on_side",
 "sitting_on_bed", "sitting_on_couch", "sitting_on_floor", "sitting_on_throne",
 "legs_up", "legs_crossed", "legs_together", "legs_apart", "spread_legs", "squatting",
 "crouching", "hunching", "arched_back", "arching_back", "stretching", "twisting",
 "twisting_body", "turning_back", "back_turned", "looking_back", "looking_over_shoulder",
 "looking_down", "looking_to_the_side", "looking_at_viewer", "looking_up", "looking_away",
 "arms_up", "arms_behind_head", "arms_behind_back", "arms_crossed", "hands_on_hips",
 "hand_on_hip", "hands_on_own_hips", "hand_on_chest", "hand_on_thigh", "hand_between_legs",
 "holding_stuff", "holding_phone", "holding_drink", "holding_tray", "holding_book",
 "sitting_on_lap", "sitting_on_face", "on_lap", "riding", "cowgirl_position",
 "doggystyle", "sex_from_behind", "missionary", "mating_press", "spooning", "prone_bone",
 "full_nelson", "piledriver", "from_side", "from_behind", "from_front", "from_above",
 "from_below", "from_above", "three_quarter_view", "cowboy_shot", "upper_body",
 "lower_body", "full_body", "sideboob", "breasts_out", "from_behind",
 "wearing_costume", "pole_dancing", "pole", "exercise_ball", "on_one_knee",
}

cnt = Counter()
for key, pairs in data.items():
    seen = set()
    for tag, score in pairs:
        if score >= 0.35 and tag in POSE:
            if tag not in seen:
                cnt[tag] += 1
                seen.add(tag)

# Biblioteca: tokens presentes
lib = ""
for p in (BASE / "Archivos" / "wildcards").glob("*.txt"):
    lib += p.read_text(encoding="utf-8").lower().replace("_", " ") + "\n"
for extra in [
    BASE / "Archivos/pose_bank/BIBLIOTECA_UNIFICADA.md",
    BASE / "Archivos/pose_bank/explicit1_acts_biblioteca.md",
    BASE / "Archivos/pose_bank/explicit2_positions_biblioteca.md",
    BASE / "Archivos/pose_bank/poses_aprobadas_lote.md",
]:
    if extra.exists():
        lib += extra.read_text(encoding="utf-8").lower().replace("_", " ") + "\n"
lib_tokens = set(re.findall(r"[a-z0-9]+", lib))

print("pose tag            imgs  cobertura")
for tag, c in cnt.most_common():
    parts = set(re.findall(r"[a-z0-9]+", tag.replace("_", " ")))
    cov = "OK" if parts.issubset(lib_tokens) else "AUSENTE"
    print(f"{tag:28s} {c:4d}  {cov}")
