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

"""
REPORT – změna stavu pojištění

Výstup:
pacient XY, současný (dnešní) stav pojištění je "X",
ke změně došlo dne Y, kdy stav byl "Z"

Používá pouze tabulku vzp_stav_pojisteni
Kompatibilní s ONLY_FULL_GROUP_BY
"""

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 – REPORT
# ==========================================
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í (poslední) 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
    -- první den změny po posledním stavu = '1'
    (
        SELECT p2.rc, p2.k_datu, p2.stav
        FROM vzp_stav_pojisteni p2
        JOIN (
            SELECT rc, MIN(k_datu) AS change_date
            FROM vzp_stav_pojisteni
            WHERE stav <> '1'
              AND k_datu > (
                    SELECT MAX(k_datu)
                    FROM vzp_stav_pojisteni t
                    WHERE t.rc = vzp_stav_pojisteni.rc
                      AND t.stav = '1'
                )
            GROUP BY rc
        ) y
          ON y.rc = p2.rc
         AND y.change_date = p2.k_datu
    ) chg
      ON chg.rc = cur.rc
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:
        jmeno = f"{r['prijmeni']} {r['jmeno']}".strip()
        print(
            f"pacient {jmeno}, "
            f"současný (dnešní) stav pojištění je \"{r['current_stav']}\", "
            f"ke změně došlo dne {r['change_date']}, "
            f"kdy stav byl \"{r['change_stav']}\""
        )

    print("\nKONEC REPORTU.")

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