"""
Script de diagnostic pour tester la connexion à LibreHardwareMonitor
"""
import socket
import urllib.request
import sys

print("=" * 60)
print("DIAGNOSTIC DE CONNEXION À LIBREHARDWAREMONITOR")
print("=" * 60)

# Test 1: Résolution DNS de localhost
print("\n[1] Résolution DNS de 'localhost'...")
try:
    ip = socket.gethostbyname('localhost')
    print(f"    ✅ localhost résolu en: {ip}")
except Exception as e:
    print(f"    ❌ Erreur: {e}")

# Test 2: Vérifier toutes les adresses pour localhost
print("\n[2] Toutes les adresses pour 'localhost'...")
try:
    infos = socket.getaddrinfo('localhost', 8085)
    for info in infos:
        print(f"    → {info[0].name}: {info[4]}")
except Exception as e:
    print(f"    ❌ Erreur: {e}")

# Test 3: Connexion socket directe sur 127.0.0.1
print("\n[3] Test connexion socket sur 127.0.0.1:8085...")
try:
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.settimeout(5)
    result = sock.connect_ex(('127.0.0.1', 8085))
    sock.close()
    if result == 0:
        print("    ✅ Port 8085 ouvert sur 127.0.0.1")
    else:
        print(f"    ❌ Port fermé (code: {result})")
except Exception as e:
    print(f"    ❌ Erreur: {e}")

# Test 4: Connexion socket directe sur localhost
print("\n[4] Test connexion socket sur localhost:8085...")
try:
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.settimeout(5)
    result = sock.connect_ex(('localhost', 8085))
    sock.close()
    if result == 0:
        print("    ✅ Port 8085 ouvert sur localhost")
    else:
        print(f"    ❌ Port fermé (code: {result})")
except Exception as e:
    print(f"    ❌ Erreur: {e}")

# Test 5: Requête HTTP avec urllib (sans requests)
print("\n[5] Test HTTP avec urllib sur 127.0.0.1...")
try:
    req = urllib.request.urlopen('http://127.0.0.1:8085/data.json', timeout=5)
    data = req.read()
    print(f"    ✅ Réponse reçue! ({len(data)} bytes)")
    print(f"    Début: {data[:100]}...")
except Exception as e:
    print(f"    ❌ Erreur: {e}")

# Test 6: Requête HTTP avec urllib sur localhost
print("\n[6] Test HTTP avec urllib sur localhost...")
try:
    req = urllib.request.urlopen('http://localhost:8085/data.json', timeout=5)
    data = req.read()
    print(f"    ✅ Réponse reçue! ({len(data)} bytes)")
except Exception as e:
    print(f"    ❌ Erreur: {e}")

# Test 7: Requête avec requests (si disponible)
print("\n[7] Test HTTP avec requests sur 127.0.0.1...")
try:
    import requests
    resp = requests.get('http://127.0.0.1:8085/data.json', timeout=5)
    print(f"    ✅ Réponse reçue! Status: {resp.status_code}, {len(resp.content)} bytes")
except ImportError:
    print("    ⚠️ Module requests non installé")
except Exception as e:
    print(f"    ❌ Erreur: {e}")

# Test 8: Requête avec requests sur localhost
print("\n[8] Test HTTP avec requests sur localhost...")
try:
    import requests
    resp = requests.get('http://localhost:8085/data.json', timeout=5)
    print(f"    ✅ Réponse reçue! Status: {resp.status_code}")
except ImportError:
    print("    ⚠️ Module requests non installé")
except Exception as e:
    print(f"    ❌ Erreur: {e}")

print("\n" + "=" * 60)
print("RECOMMANDATION:")
print("=" * 60)
print("""
Si les tests 3-4 échouent mais que le navigateur fonctionne:
  → Vérifiez le pare-feu Windows (autorisez Python)
  
Si les tests avec 127.0.0.1 réussissent mais localhost échoue:
  → Problème IPv6, utilisez 127.0.0.1 dans la config

Si tout échoue sauf le navigateur:
  → Un proxy ou antivirus bloque peut-être Python
  → Essayez de désactiver temporairement l'antivirus
""")

input("\nAppuyez sur Entrée pour fermer...")
