"""migrate.py — runner migration sederhana untuk database belajar_app.

Jalankan dari folder chapter:  python3 migrate.py
Bisa dijalankan berulang kali: migration yang sudah tercatat dilewati.
Port default 3306; timpa lewat variabel lingkungan DB_PORT.
"""

import os
from pathlib import Path

import pymysql

FOLDER_MIGRATION = Path(__file__).resolve().parent / "migrations"
NAMA_DATABASE = "belajar_app"

port = int(os.environ.get("DB_PORT", "3306"))
koneksi = pymysql.connect(host="127.0.0.1", user="root", password="", port=port)

with koneksi.cursor() as kursor:
    kursor.execute(f"CREATE DATABASE IF NOT EXISTS {NAMA_DATABASE}")
    kursor.execute(f"USE {NAMA_DATABASE}")
    kursor.execute(
        "CREATE TABLE IF NOT EXISTS schema_migrations (versi VARCHAR(100) PRIMARY KEY)"
    )
    kursor.execute("SELECT versi FROM schema_migrations")
    sudah = {baris[0] for baris in kursor.fetchall()}

terpakai = 0
for berkas in sorted(FOLDER_MIGRATION.glob("*.sql")):
    versi = berkas.stem
    if versi in sudah:
        print(f"lewati    {versi} (sudah terapkan)")
        continue
    isi = berkas.read_text(encoding="utf-8")
    with koneksi.cursor() as kursor:
        for statement in isi.split(";"):
            if statement.strip():
                kursor.execute(statement)
        kursor.execute(
            "INSERT INTO schema_migrations (versi) VALUES (%s)", (versi,)
        )
    koneksi.commit()
    terpakai += 1
    print(f"terapkan  {versi} ... OK")

print(f"selesai: {terpakai} migration baru, {len(sudah) + terpakai} total terapkan")
koneksi.close()
