#!/usr/bin/env python3
"""Após pipeline.py: (1) gera imagem do artigo 03, (2) preenche Yoast SEO em todos os 12 posts."""

import base64
import json
import re
import sys
import time
from pathlib import Path

import requests
from PIL import Image
from requests.auth import HTTPBasicAuth

ENV = {}
for line in open("/opt/mia/.env"):
    if "=" in line and not line.strip().startswith("#"):
        k, _, v = line.strip().partition("=")
        ENV[k] = v
OPENAI_KEY = ENV["OPENAI_API_KEY"]

WP_BASE = "https://franciscoborrello.com.br"
WP_USER = "remoraes09@gmail.com"
WP_PASS = "pZSE dY02 sxgC N9KA qEza ElOx"
WP_UA = "WordPress/6.5; https://franciscoborrello.com.br"
auth = HTTPBasicAuth(WP_USER, WP_PASS)
H = {"User-Agent": WP_UA}

ROOT = Path("/opt/mia/workspace/clientes/francisco_borrello/blog")
IMG_DIR = ROOT / "imagens"

# === 01: post_id criado manualmente
ARTICLE_01 = {
    "post_id": 33284,
    "slug": "01-rede-de-hartmann",
    "title": "Rede de Hartmann: o que é e por que afeta seu sono",
    "focus_kw": "Rede de Hartmann",
    "tags": "rede de Hartmann, Ernst Hartmann, zonas geopáticas, geobiologia, insônia, sono, Método Radgeo",
    "excerpt": "A Rede de Hartmann é uma malha energética invisível descoberta pelo médico alemão Ernst Hartmann em mais de 150.000 testes. Quando a cama está sobre um cruzamento dessa rede, o corpo entra em estresse biológico crônico - gerando insônia, fadiga e dores sem causa aparente.",
}


def gen_image(briefing: str, slug: str) -> Path:
    prompt = (
        "Editorial illustration, magazine cover style, painterly and elegant. "
        "Theme: " + briefing[:1500] + " "
        "No text overlays. Cinematic 16:9 framing. Sophisticated."
    )
    r = requests.post(
        "https://api.openai.com/v1/images/generations",
        headers={"Authorization": f"Bearer {OPENAI_KEY}", "Content-Type": "application/json"},
        json={"model": "gpt-image-1", "prompt": prompt, "size": "1536x1024", "quality": "high", "n": 1},
        timeout=240,
    )
    r.raise_for_status()
    b64 = r.json()["data"][0]["b64_json"]
    png = IMG_DIR / f"{slug}.png"
    png.write_bytes(base64.b64decode(b64))
    jpg = IMG_DIR / f"{slug}.jpg"
    Image.open(png).convert("RGB").resize((1200, 800), Image.LANCZOS).save(jpg, "JPEG", quality=88, optimize=True)
    return jpg


def wp_upload(jpg: Path, alt: str, slug: str) -> int:
    r = requests.post(
        f"{WP_BASE}/wp-json/wp/v2/media",
        auth=auth,
        headers={**H, "Content-Disposition": f'attachment; filename="{slug}.jpg"', "Content-Type": "application/octet-stream"},
        data=jpg.read_bytes(),
        timeout=180,
    )
    r.raise_for_status()
    mid = r.json()["id"]
    requests.post(
        f"{WP_BASE}/wp-json/wp/v2/media/{mid}",
        auth=auth, headers=H,
        json={"alt_text": alt[:200], "title": alt[:80]},
        timeout=30,
    )
    return mid


def update_post(post_id: int, payload: dict):
    r = requests.post(
        f"{WP_BASE}/wp-json/wp/v2/posts/{post_id}",
        auth=auth, headers=H, json=payload, timeout=60,
    )
    if r.status_code not in (200, 201):
        print(f"  ERR update_post {post_id}: {r.status_code} {r.text[:300]}")
        return False
    return True


def yoast_seo(title: str, focus_kw: str, excerpt: str) -> dict:
    """Gera SEO title, meta_description, focus_kw."""
    # SEO Title: capped 60 chars, com focus_kw e marca
    base = title
    if "|" not in base and " - " not in base:
        seo_title = f"{title} | Francisco Borrello"
    else:
        seo_title = title
    if len(seo_title) > 60:
        seo_title = seo_title[:57].rsplit(" ", 1)[0] + "..."
    # Meta description: capped ~155 chars, focus_kw no início se possível
    desc = excerpt.strip()
    desc = re.sub(r"\s+", " ", desc)
    if len(desc) > 155:
        desc = desc[:152].rsplit(" ", 1)[0] + "..."
    return {
        "meta": {
            "_yoast_wpseo_focuskw": focus_kw,
            "_yoast_wpseo_title": seo_title,
            "_yoast_wpseo_metadesc": desc,
            "_yoast_wpseo_opengraph-title": seo_title,
            "_yoast_wpseo_opengraph-description": desc,
            "_yoast_wpseo_twitter-title": seo_title,
            "_yoast_wpseo_twitter-description": desc,
        }
    }


def main():
    print("=== FINISHER ===", flush=True)
    report_path = ROOT / "publicacao-report.json"
    report = json.loads(report_path.read_text()) if report_path.exists() else []

    # 1) Artigo 03 — gerar e anexar imagem
    art03 = next((r for r in report if r.get("slug", "").startswith("03-")), None)
    if art03 and art03.get("status") == "OK" and not art03.get("media_id"):
        print(f"\n[03] gerando imagem para post {art03['post_id']}", flush=True)
        briefing = (
            "Editorial illustration in painterly style of a sophisticated round radionic table "
            "(Mesa Radiônica) crafted in dark polished wood with brass details and engraved sacred "
            "geometry patterns on its surface. The table glows softly with subtle golden energy "
            "emanating from its center, set against a deep indigo backdrop. Mystical but elegant, "
            "high-end occult-science aesthetic. No text. 16:9 cinematic framing."
        )
        try:
            jpg = gen_image(briefing, "03-mesa-radionica-borrello")
            mid = wp_upload(jpg, "Ilustracao da Mesa Radionica Quantica Borrello", "03-mesa-radionica-borrello")
            ok = update_post(art03["post_id"], {"featured_media": mid})
            art03["media_id"] = mid
            print(f"  media_id: {mid}, updated: {ok}", flush=True)
        except Exception as e:
            print(f"  ERR: {e}", flush=True)

    # 2) Yoast SEO pass em todos os posts (incluindo 01)
    print("\n=== YOAST SEO PASS ===", flush=True)
    all_posts = []
    # Artigo 01 (manual)
    all_posts.append({
        "post_id": 33284,
        "title": "Rede de Hartmann: o que é e por que afeta seu sono",
        "focus_kw": "Rede de Hartmann",
        "excerpt": "A Rede de Hartmann é uma malha energética invisível descoberta pelo médico alemão Ernst Hartmann. Quando a cama está sobre um cruzamento, o corpo entra em estresse crônico - gerando insônia e fadiga sem causa aparente.",
    })
    # Resto via report
    FOCUS_KW = {
        "02-": "cama sobre cruzamento de Hartmann",
        "03-": "Mesa Radiônica Quântica Borrello",
        "04-": "sinais de energia ruim na casa",
        "05-": "diferença entre radiestesia e radiônica",
        "06-": "Feng Shui 2026",
        "07-": "como usar pêndulo de radiestesia",
        "08-": "geoacupuntura",
        "09-": "mitos sobre Feng Shui",
        "10-": "Feng Shui na cozinha",
        "11-": "Feng Shui no home office",
        "12-": "plantas que protegem a casa",
    }
    for r in report:
        if r.get("status") != "OK":
            continue
        slug = r.get("slug", "")
        kw_key = slug[:3]
        focus = FOCUS_KW.get(kw_key, slug.split("-", 1)[1].replace("-", " "))
        # Get excerpt from post
        try:
            gp = requests.get(f"{WP_BASE}/wp-json/wp/v2/posts/{r['post_id']}", auth=auth, headers=H, timeout=30)
            excerpt = ""
            if gp.status_code == 200:
                excerpt = gp.json().get("excerpt", {}).get("raw", "") or gp.json().get("excerpt", {}).get("rendered", "")
                excerpt = re.sub(r"<[^>]+>", "", excerpt).strip()
        except Exception:
            excerpt = ""
        all_posts.append({
            "post_id": r["post_id"],
            "title": r["title"],
            "focus_kw": focus,
            "excerpt": excerpt,
        })

    for p in all_posts:
        seo = yoast_seo(p["title"], p["focus_kw"], p["excerpt"])
        ok = update_post(p["post_id"], seo)
        print(f"  [{p['post_id']}] focus='{p['focus_kw'][:50]}' SEO updated: {ok}", flush=True)
        time.sleep(0.5)

    # Save final report
    final = {"timestamp": time.strftime("%Y-%m-%d %H:%M:%S"), "posts": [
        {"post_id": 33284, "slug": "01-rede-de-hartmann", "title": "Rede de Hartmann: o que é e por que afeta seu sono",
         "edit_link": f"{WP_BASE}/wp-admin/post.php?post=33284&action=edit",
         "preview_link": f"{WP_BASE}/?p=33284&preview=true"},
    ] + [
        {"post_id": r["post_id"], "slug": r["slug"], "title": r["title"],
         "edit_link": r["edit_link"], "preview_link": r["preview_link"]}
        for r in report if r.get("status") == "OK"
    ]}
    (ROOT / "final-report.json").write_text(json.dumps(final, indent=2, ensure_ascii=False))
    print("\n=== DONE ===\nFinal report:", ROOT / "final-report.json", flush=True)


if __name__ == "__main__":
    main()
