"""One-time production fix: allow any programme level slug / module kind.

Usage on server:
    cd /var/www/polepowerpanel/kelly-backend
    source venv/bin/activate
    python -m scripts.migrate_programme_free_text

Then restart uvicorn/gunicorn so the updated ORM (String columns) is loaded.
"""
from __future__ import annotations

import logging
import sys
from pathlib import Path

sys.path.insert(0, str(Path(__file__).resolve().parents[1]))

from app.database import engine
from app.programme.services.programme_service import sync_programme_string_columns


def main() -> None:
    logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s")
    print("Migrating programme_modules.kind and programme_levels.slug to free text…")
    sync_programme_string_columns(engine)

    from sqlalchemy import select

    from app.database import SessionLocal
    from app.programme.models_programme import ProgrammeLevel, ProgrammeModule

    db = SessionLocal()
    try:
        levels = db.scalars(select(ProgrammeLevel)).all()
        modules = db.scalars(select(ProgrammeModule)).all()
        print(f"Verified: {len(levels)} level(s), {len(modules)} module(s) loaded as plain text.")
        for mod in modules[:5]:
            print(f"  module kind={mod.kind!r}")
    finally:
        db.close()

    print("Done. Restart the backend process now (required so old Python code is unloaded).")


if __name__ == "__main__":
    main()
