#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
REPORT – ZMĚNA STAVU POJIŠTĚNÍ

Výstup:
pacient XY, současný stav pojištění je "X",
ke změně došlo dne YYYY-MM-DD (ze "1" na "X")

Používá pouze tabulku vzp_stav_pojisteni
"""

import pymysql

# ==========================================
# MYSQL CONFIG
# ==========================================
MYSQL_CONFIG = {
    "host": "192.168.1.76",
    "port": 3307,
    "user": "root",
    "password": "Vlado9674+",
    "database": "medevio",
    "charset": "utf8mb4",
    "cursorclass": pymysql.cursors.DictCursor,
}

# ==========================================
# SQL – KOREKTNÍ DEFINICE ZMĚNY (1 → X)
# ==========================================
SQL = """
SELECT
    cur.rc,
    cur.prijmeni,
    cur.jmeno,
    cur.stav AS current_stav,
    chg.k_datu AS change_date,
    chg.stav AS change_stav
FROM
    -- aktuální stav pacienta
    (
        SELECT p1.*
        FROM vzp_stav_pojisteni p1
        JOIN (
            SELECT rc, MAX(k_datu) AS max_date
            FROM vzp_stav_pojisteni
            GROUP BY rc
        ) x
          ON x.rc = p1.rc
         AND x.max_date = p1.k_datu
        WHERE p1.stav <> '1'
    ) cur
JOIN
    -- poslední den pojištění
    (
        SELECT rc, MAX(k_datu) AS last_ok
        FROM vzp_stav_pojisteni
        WHERE stav = '1'
        GROUP BY rc
    ) ok
      ON ok.rc = cur.rc
JOIN
    -- JEDEN konkrétní řádek změny (nejmenší ID)
    vzp_stav_pojisteni chg
      ON chg.id = (
            SELECT MIN(id)
            FROM vzp_stav_pojisteni z
            WHERE z.rc = cur.rc
              AND z.k_datu = (
                    SELECT MIN(k_datu)
                    FROM vzp_stav_pojisteni zz
                    WHERE zz.rc = cur.rc
                      AND zz.k_datu > ok.last_ok
                )
        )
ORDER BY cur.prijmeni, cur.jmeno;

"""

# ==========================================
# MAIN
# ==========================================
def main():
    mysql = pymysql.connect(**MYSQL_CONFIG)

    with mysql.cursor() as cur:
        cur.execute(SQL)
        rows = cur.fetchall()

    mysql.close()

    print("\nREPORT – ZMĚNA STAVU POJIŠTĚNÍ\n")

    for r in rows:
        pacient = f"{r['prijmeni']} {r['jmeno']}".strip()
        print(
            f"pacient {pacient}, "
            f"současný stav pojištění je \"{r['current_stav']}\", "
            f"ke změně došlo dne {r['change_date']} "
            f"(ze \"1\" na \"{r['change_stav']}\")"
        )

    print("\nKONEC REPORTU.")

# ==========================================
if __name__ == "__main__":
    main()
