"""
fix_subtitle_languages.py
Los archivos *-es.vtt descargados por scrape_subtitles.py contienen en su
mayoria contenido en PORTUGUÉS (no en español). Este script:
  1. Detecta el idioma real de cada *-es.vtt
  2. Renombra los archivos PT incorrectamente etiquetados a *-pt.vtt
  3. Actualiza course_content.json quitando subtitle_es donde sea PT
  4. Corre build_course_map.py + raio:import para sincronizar la DB
"""
import json
import re
import subprocess
import sys
from pathlib import Path

sys.stdout.reconfigure(encoding="utf-8")

SCRIPTS_DIR  = Path(__file__).parent
BASE_DIR     = SCRIPTS_DIR.parent
SUBS_DIR     = BASE_DIR / "public" / "subtitles"
CONTENT_FILE = SCRIPTS_DIR / "course_content.json"

PT_WORDS = re.compile(
    r'\b(você|não|olá|tudo|obrigado|obrigada|então|português|bem-vindo|bem-vindos|'
    r'aqui|esse|essa|isso|esses|estas|nosso|nossa|mas|muito|porque|quando|onde|'
    r'sempre|nunca|agora|depois|antes|durante|enquanto|vamos|quero|posso)\b',
    re.I | re.U,
)
ES_WORDS = re.compile(
    r'\b(hola|usted|también|sería|tengo|tiene|pero|porque|cuando|donde|muy|'
    r'aquí|así|español|siempre|nunca|ahora|después|antes|durante|mientras|'
    r'vamos|quiero|puedo|está|esto|eso)\b',
    re.I | re.U,
)
EN_WORDS = re.compile(
    r'\b(the|and|that|this|with|have|from|they|would|could|should|about|there|their)\b',
    re.I,
)


def detect(path: Path) -> str:
    try:
        text = path.read_text(encoding="utf-8", errors="ignore")
        body = "\n".join(text.splitlines()[10:])[:3000]
        pt = len(PT_WORDS.findall(body))
        es = len(ES_WORDS.findall(body))
        en = len(EN_WORDS.findall(body))
        scores = {"pt": pt, "es": es, "en": en}
        return max(scores, key=scores.get)
    except Exception:
        return "unknown"


def main():
    if not SUBS_DIR.exists():
        print("No existe directorio de subtítulos")
        return

    content = json.loads(CONTENT_FILE.read_text(encoding="utf-8"))
    content_by_num = {l["num"]: l for l in content}

    renamed_to_pt = 0
    already_es    = 0

    for es_file in sorted(SUBS_DIR.glob("*-es.vtt")):
        m = re.match(r"^(\d+)-es\.vtt$", es_file.name)
        if not m:
            continue
        num  = int(m.group(1))
        lang = detect(es_file)

        if lang == "pt":
            pt_dest = SUBS_DIR / f"{num:02d}-pt.vtt"
            # Si ya existe un -pt.vtt, quedate con el mas grande
            if pt_dest.exists():
                if es_file.stat().st_size > pt_dest.stat().st_size:
                    pt_dest.unlink()
                    es_file.rename(pt_dest)
                else:
                    es_file.unlink()
            else:
                es_file.rename(pt_dest)

            # Limpiar subtitle_es del JSON para este num
            lesson = content_by_num.get(num)
            if lesson and lesson.get("subtitle_es"):
                lesson.pop("subtitle_es", None)

            renamed_to_pt += 1
            print(f"  [{num:02d}] es.vtt → pt.vtt  (era portugués)")
        else:
            already_es += 1

    # Guardar JSON actualizado
    CONTENT_FILE.write_text(
        json.dumps(content, ensure_ascii=False, indent=2),
        encoding="utf-8",
    )

    total_es = len(list(SUBS_DIR.glob("*-es.vtt")))
    total_pt = len(list(SUBS_DIR.glob("*-pt.vtt")))
    total_en = len(list(SUBS_DIR.glob("*-en.vtt")))

    print(f"\nRenombrados PT: {renamed_to_pt} | Ya eran ES: {already_es}")
    print(f"Totales → ES: {total_es} | PT: {total_pt} | EN: {total_en}")
    print("\nActualizando DB...")

    subprocess.run(["python", str(SCRIPTS_DIR / "build_course_map.py")], check=True)
    subprocess.run(
        ["php", "artisan", "raio:import", "--force"],
        cwd=str(BASE_DIR),
        check=True,
    )
    print("\nListo.")


if __name__ == "__main__":
    main()
