"""
Podrobný průzkum FILES a EXTERNI_DB – spusť na Windows: python db_query2.py
"""
import fdb

conn = fdb.connect(
    dsn=r'localhost:c:\medicus 3\data\medicus.fdb',
    user='SYSDBA',
    password='masterkey',
    charset='win1250'
)
cur = conn.cursor()
out = []

# 1. Obsah EXTERNI_DB
out.append("=== EXTERNI_DB (konfigurace externích databází) ===")
cur.execute("SELECT DBNAME, PATH, SERVER, HESLO FROM EXTERNI_DB")
for row in cur.fetchall():
    out.append(f"  DBNAME={row[0]}  PATH={row[1]}  SERVER={row[2]}  HESLO={row[3]}")

# 2. FILES – přehled po rocích
out.append("\n=== FILES – počty záznamů po rocích ===")
cur.execute("""
    SELECT EXTRACT(YEAR FROM DATUM) as ROK, COUNT(*) as POCET,
           SUM(OCTET_LENGTH(BODY)) as CELKEM_BYTU
    FROM FILES
    GROUP BY EXTRACT(YEAR FROM DATUM)
    ORDER BY ROK
""")
total_bytes = 0
for row in cur.fetchall():
    rok, pocet, bytu = row
    mb = (bytu or 0) / 1024 / 1024
    total_bytes += (bytu or 0)
    out.append(f"  Rok {int(rok) if rok else '?'}:  {pocet} souborů,  {mb:.1f} MB")
out.append(f"  CELKEM: {total_bytes/1024/1024:.1f} MB v BLOB datech FILES")

# 3. FILES – ukázka typů souborů
out.append("\n=== FILES – typy souborů (dle přípony FILENAME) ===")
cur.execute("""
    SELECT LOWER(SUBSTRING(FILENAME FROM CHAR_LENGTH(FILENAME) - 3)) as EXT,
           COUNT(*) as POCET
    FROM FILES
    WHERE FILENAME IS NOT NULL
    GROUP BY 1
    ORDER BY 2 DESC
""")
for row in cur.fetchall():
    out.append(f"  {row[0]}  :  {row[1]} souborů")

# 4. FILES – ukázka prvních 5 záznamů (bez BODY)
out.append("\n=== FILES – ukázka 5 záznamů (bez binárních dat) ===")
cur.execute("""
    SELECT ID, IDPAC, FILENAME, DATUM, OCTET_LENGTH(BODY) as VELIKOST,
           POZNAMKA, IDDOCTYP
    FROM FILES
    ORDER BY DATUM DESC
    ROWS 5
""")
for row in cur.fetchall():
    out.append(f"  ID={row[0]}  IDPAC={row[1]}  soubor={row[2]}  datum={row[3]}"
               f"  velikost={row[4]}B  pozn={row[5]}  typ={row[6]}")

# 5. DOCTYP – typy dokumentů
out.append("\n=== DOCTYP – číselník typů dokumentů ===")
cur.execute("SELECT ID, NAZEV, SYSID FROM DOCTYP ORDER BY ID")
for row in cur.fetchall():
    out.append(f"  ID={row[0]}  nazev={row[1]}  sysid={row[2]}")

result = '\n'.join(out)
print(result)
with open('db_query2_result.txt', 'w', encoding='utf-8') as f:
    f.write(result)
print("\nUloženo do db_query2_result.txt")
conn.close()
