#!/bin/bash

# Colores para que se vea bonito y legible
RED='\033[0;31m'
GREEN='\033[0;32m'
BLUE='\033[0;34m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# Verificamos que se ejecute como root
if [ "$EUID" -ne 0 ]; then
  echo -e "${RED}Por favor, ejecuta este script como root (sudo).${NC}"
  exit 1
fi

while true; do
    clear
    echo -e "${BLUE}===============================================${NC}"
    echo -e "${BLUE}   🛡️  GESTOR DE FAIL2BAN - NAS (LOCAL)       ${NC}"
    echo -e "${BLUE}===============================================${NC}"
    echo ""
    echo -e "${YELLOW}1.${NC} Ver ESTADO General (Jails activas)"
    echo -e "${YELLOW}2.${NC} Ver DETALLE de una Jail (IPs baneadas)"
    echo -e "${YELLOW}3.${NC} Ver LOGS en tiempo real"
    echo -e "${YELLOW}4.${NC} 🔓 DESBANEAR una IP"
    echo -e "${BLUE}-----------------------------------------------${NC}"
    echo -e "${YELLOW}5.${NC} Editar Configuración Principal (jail.local)"
    echo -e "${YELLOW}6.${NC} Editar Filtro Nginx Proxy Manager"
    echo -e "${YELLOW}7.${NC} Editar Acción Docker (iptables/ipset)"
    echo -e "${BLUE}-----------------------------------------------${NC}"
    echo -e "${YELLOW}8.${NC} Reiniciar Fail2Ban (Aplicar cambios)"
    echo -e "${YELLOW}0.${NC} Salir"
    echo ""
    read -p "Elige una opción: " option

    case $option in
        1)
            echo ""
            echo -e "${GREEN}--- Jails Activas ---${NC}"
            fail2ban-client status
            echo ""
            read -p "Presiona Enter para continuar..."
            ;;
        2)
            echo ""
            # Obtenemos la lista de jails limpia
            jails=$(fail2ban-client status | grep "Jail list:" | sed 's/.*Jail list://g' | sed 's/,//g')
            
            echo -e "Escribe el nombre de la Jail a inspeccionar:"
            echo -e "${GREEN}$jails${NC}"
            echo ""
            read -p "Nombre de la Jail: " jail_name
            echo ""
            fail2ban-client status $jail_name
            echo ""
            read -p "Presiona Enter para continuar..."
            ;;
        3)
            clear
            echo -e "${GREEN}Mostrando logs... (Presiona CTRL+C para salir)${NC}"
            tail -f /var/log/fail2ban.log
            ;;
        4)
            echo ""
            read -p "Introduce la IP a desbanear: " ip_to_unban
            read -p "Introduce la Jail (ej: sshd, npm-web): " jail_target
            fail2ban-client set $jail_target unbanip $ip_to_unban
            echo -e "${GREEN}IP $ip_to_unban desbaneada de $jail_target (si existía).${NC}"
            sleep 2
            ;;
        5)
            nano /etc/fail2ban/jail.local
            ;;
        6)
            nano /etc/fail2ban/filter.d/npm-general.conf
            ;;
        7)
            nano /etc/fail2ban/action.d/docker-action.conf
            ;;
        8)
            echo -e "${YELLOW}Reiniciando servicio...${NC}"
            systemctl restart fail2ban
            if [ $? -eq 0 ]; then
                echo -e "${GREEN}Fail2Ban reiniciado con éxito.${NC}"
            else
                echo -e "${RED}Hubo un error al reiniciar.${NC}"
            fi
            sleep 2
            ;;
        0)
            echo "Saliendo..."
            exit 0
            ;;
        *)
            echo -e "${RED}Opción no válida.${NC}"
            sleep 1
            ;;
    esac
done
