"""Test 2 ISOLATO: blocco orario 04:00-14:59.
Non importa il runner, replica la logica is_blocked_hour.
"""
from datetime import datetime, timezone
from zoneinfo import ZoneInfo

LOCAL_TZ = ZoneInfo("Europe/Rome")
BLOCK_HOURS_START = 4
BLOCK_HOURS_END = 14

def is_blocked_hour(hour):
    return BLOCK_HOURS_START <= hour <= BLOCK_HOURS_END

print("=" * 70)
print("TEST 2: BLOCCO ORARIO (04:00-14:59)")
print("=" * 70)
print(f"\nBLOCK_HOURS_START = {BLOCK_HOURS_START}, BLOCK_HOURS_END = {BLOCK_HOURS_END}")
print(f"\n[2.1] Test is_blocked_hour su tutte le 24 ore:")
print(f"  {'ORA':<8s} {'BLOCKED':<10s} {'ATTESO':<10s}")
all_pass = True
for h in range(24):
    blocked = is_blocked_hour(h)
    expected_block = 4 <= h <= 14
    status = "OK" if blocked == expected_block else "FAIL"
    if blocked != expected_block:
        all_pass = False
    print(f"  {h:02d}:00  {str(blocked):<10s} {str(expected_block):<10s} {status}")

if all_pass:
    print(f"\n  TEST 2 PASS: is_blocked_hour blocca correttamente 04:00-14:59, lascia passare 15:00-03:59")
else:
    print(f"\n  TEST 2 FAIL: logica is_blocked_hour sbagliata")

# Test specifico orario attuale
now_local = datetime.now(timezone.utc).astimezone(LOCAL_TZ)
print(f"\n[2.2] Orario attuale Europe/Rome: {now_local.strftime('%Y-%m-%d %H:%M:%S')} (hour={now_local.hour})")
print(f"  is_blocked_hour(now) = {is_blocked_hour(now_local.hour)}")
print(f"  ATTESO: False (siamo fuori dalla finestra 04-14)")

# Test casi critici
print("\n[2.3] Edge cases:")
for h, name in [(3, "03:59 (1 min prima del blocco)"),
                (4, "04:00 (inizio blocco)"),
                (14, "14:00 (fine blocco inclusa)"),
                (15, "15:00 (1 ora dopo fine blocco)"),
                (3, "03:00 (deep night)"),
                (23, "23:00 (sera)")]:
    blocked = is_blocked_hour(h)
    print(f"  {h:02d}:00 ({name}): blocked={blocked}")
