#!/bin/bash

# Script di installazione IDS su AlmaLinux 9
# Eseguire con: chmod +x setup_almalinux.sh && sudo ./setup_almalinux.sh

# Colori per output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'

echo -e "${BLUE}🛡️  INSTALLAZIONE IDS - INTRUSION DETECTION SYSTEM${NC}"
echo "===================================================="

# Verifica esecuzione come root
if [ "$EUID" -ne 0 ]; then 
    echo -e "${RED}❌ Esegui questo script come root (sudo)${NC}"
    exit 1
fi

# 1. Aggiorna sistema
echo -e "\n${BLUE}📦 Aggiornamento sistema AlmaLinux 9...${NC}"
dnf update -y

# 2. Installa dipendenze sistema
echo -e "\n${BLUE}📦 Installazione dipendenze sistema...${NC}"
dnf install -y epel-release
dnf install -y python3.11 python3.11-pip nodejs npm postgresql-server postgresql-contrib git

# 3. Installa Node.js 20 (LTS)
echo -e "\n${BLUE}📦 Installazione Node.js 20...${NC}"
dnf module reset nodejs -y
dnf module enable nodejs:20 -y
dnf install -y nodejs

# 4. Inizializza PostgreSQL
echo -e "\n${BLUE}🗄️  Inizializzazione PostgreSQL...${NC}"
if [ ! -d "/var/lib/pgsql/data/base" ]; then
    postgresql-setup --initdb
    systemctl enable postgresql
    systemctl start postgresql
    echo -e "${GREEN}✅ PostgreSQL inizializzato${NC}"
else
    echo -e "${YELLOW}ℹ️  PostgreSQL già inizializzato${NC}"
fi

# 5. Configura PostgreSQL
echo -e "\n${BLUE}🔧 Configurazione PostgreSQL...${NC}"
sudo -u postgres psql -c "CREATE DATABASE ids_database;" 2>/dev/null || echo "Database già esistente"
sudo -u postgres psql -c "CREATE USER ids_user WITH PASSWORD 'ids_password_change_me';" 2>/dev/null || echo "Utente già esistente"
sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE ids_database TO ids_user;" 2>/dev/null

# Configura pg_hba.conf per connessioni locali
PG_HBA="/var/lib/pgsql/data/pg_hba.conf"
if ! grep -q "ids_user" "$PG_HBA"; then
    echo "local   ids_database    ids_user                                md5" >> "$PG_HBA"
    echo "host    ids_database    ids_user        127.0.0.1/32            md5" >> "$PG_HBA"
    systemctl restart postgresql
fi

# 6. Crea utente IDS
echo -e "\n${BLUE}👤 Creazione utente ids...${NC}"
if ! id "ids" &>/dev/null; then
    useradd -m -s /bin/bash ids
    echo -e "${GREEN}✅ Utente ids creato${NC}"
else
    echo -e "${YELLOW}ℹ️  Utente ids già esistente${NC}"
fi

# 7. Crea directory di lavoro
echo -e "\n${BLUE}📁 Creazione directory di lavoro...${NC}"
mkdir -p /opt/ids
chown -R ids:ids /opt/ids

echo -e "\n${GREEN}✅ INSTALLAZIONE BASE COMPLETATA!${NC}"
echo ""
echo -e "${YELLOW}📋 PROSSIMI PASSI:${NC}"
echo -e "   1. Clona il repository da git.alfacom.it:"
echo -e "      ${BLUE}cd /opt/ids${NC}"
echo -e "      ${BLUE}sudo -u ids git clone https://git.alfacom.it/your-repo/ids.git .${NC}"
echo ""
echo -e "   2. Configura environment variables:"
echo -e "      ${BLUE}sudo -u ids nano /opt/ids/.env${NC}"
echo ""
echo -e "   3. Installa dipendenze Node.js:"
echo -e "      ${BLUE}cd /opt/ids && sudo -u ids npm install${NC}"
echo ""
echo -e "   4. Installa dipendenze Python:"
echo -e "      ${BLUE}cd /opt/ids/python_ml && sudo -u ids pip3.11 install -r requirements.txt${NC}"
echo ""
echo -e "   5. Esegui lo script di configurazione crontab:"
echo -e "      ${BLUE}cd /opt/ids/deployment && sudo ./setup_crontab.sh${NC}"
echo ""
echo -e "${GREEN}🎉 Sistema pronto per il deployment!${NC}"
