import psycopg2

conn = psycopg2.connect(host="192.168.1.76", port=5432, user="vladimir.buzalka",
                        password="Vlado7309208104++", database="fotky_buzalkovi")
cur = conn.cursor()

cur.execute("""
    SELECT
        COUNT(*)                          AS unikatnich_souboru,
        SUM(velikost)                     AS celkova_velikost,
        AVG(velikost)                     AS prumerna_velikost,
        MIN(velikost)                     AS nejmensi,
        MAX(velikost)                     AS nejvetsi
    FROM zaloha_obrazku
""")
z = cur.fetchone()

cur.execute("SELECT COUNT(*), COUNT(DISTINCT hostname) FROM zdrojove_soubory")
s = cur.fetchone()

cur.execute("SELECT hostname, COUNT(*) FROM zdrojove_soubory GROUP BY hostname ORDER BY hostname")
hosts = cur.fetchall()

conn.close()

def fmt(b):
    if b is None: return "N/A"
    for unit in ("B", "KB", "MB", "GB", "TB"):
        if b < 1024: return f"{b:.1f} {unit}"
        b /= 1024
    return f"{b:.1f} PB"

print("=" * 45)
print("  ZÁLOHA — statistiky")
print("=" * 45)
print(f"  Unikátních souborů (záloha):  {z[0]:>10,}")
print(f"  Celková velikost:             {fmt(z[1]):>10}")
print(f"  Průměrná velikost:            {fmt(z[2]):>10}")
print(f"  Nejmenší soubor:              {fmt(z[3]):>10}")
print(f"  Největší soubor:              {fmt(z[4]):>10}")
print()
print(f"  Zdrojových záznamů celkem:    {s[0]:>10,}")
print(f"  Počet zdrojových serverů:     {s[1]:>10,}")
print()
print("  Záznamy podle hostname:")
for host, count in hosts:
    print(f"    {host:<20} {count:>8,} souborů")
print("=" * 45)
