import argparse
from pythonping import ping
import ipaddress
import requests
import logging

DISCORD_WEBHOOK_URL='https://discord.com/api/webhooks/1229025346385608824/kIt2dp2znu0jR85QbOPmoMAteHaB9BCJDTMfn0cHE9mwpxHkbUNc9By2Y7n6gpufoyco'
logging.basicConfig(filename='/var/log/status.log', level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

def read_document(document_name):
    with open(document_name, 'r') as file:
        # Leer todas las líneas del archivo y guardarlas en un conjunto
        return {linea.rstrip('\n') for linea in file}

def parseArguments(): 
    # Crear un objeto ArgumentParser
    parser = argparse.ArgumentParser(description='Ejemplo de script con flags')

    # Agregar los argumentos con sus respectivos flags
    parser.add_argument('-W', '--web', action='store', dest='web', help='Indicar un archivo con lista de Webs')
    parser.add_argument('-H', '--host', action='store', dest='host', help='Indicar un archivo con lista de hosts')

    try: 
        # Parsear los argumentos de la línea de comandos
        return parser.parse_args()
    except argparse.ArgumentError as e:
        # Si ocurre un error al analizar los argumentos, mostrar un mensaje de error
        print("Error:", e)
        # Mostrar el mensaje de ayuda
        parser.print_help()
        exit()

def toIP(hosts):
    ips = set()
    for host in hosts:
        try:
            ip = ipaddress.IPv4Address(host)
            ips.add(ip)
        except ipaddress.AddressValueError:
            print(f"La entrada '{host}' no es una dirección IP válida.")
    return ips

def check_ping(hosts):
    for host in hosts:
        try:
            response = ping(str(host), count=4, timeout=2) # verbose=True -> Para ver la respuesta del ping
            if not response.success(): 
                logging.info(f"Bad ping: {host}")
                send_discord_message(f"Ping fallido para el host: {host}")
            elif response.success():
                logging.info(f"Ping correct: {host}")
        except Exception as e:
            logging.info(f"Bad ping: {host}")

def send_discord_message(message):
    data = {
        "content": message
    }
    try:
        response = requests.post(DISCORD_WEBHOOK_URL, json=data)
        response.raise_for_status()
    except requests.exceptions.RequestException as e:
        print(f"Error sending Discord message: {e}")
        logging.info(f"Error sending Discord message: {e}")
    else:
        logging.info("Discord message sent successfully!")

if __name__ == '__main__':
    args = parseArguments()
    ips_and_hosts = set()
    if args.host:
        ips_and_hosts.update(toIP(read_document(args.host)))
    if args.web:
        print("Hay webs")
        # Parsear correctamente
        # ips_and_hosts.update()
    check_ping(ips_and_hosts)