#!/bin/bash
# 🏢 NETGESCON - SETUP GIT SERVER MASTER (GITEA)
# Creato: 19/07/2025 - Setup Git Server Michele + AI

set -e

echo "🏢 === NETGESCON - SETUP GIT SERVER MASTER ==="
echo "📅 $(date '+%Y-%m-%d %H:%M:%S')"
echo ""

# === CONFIGURAZIONI ===
GITEA_VERSION="1.21.0"
GITEA_USER="git"
GITEA_HOME="/var/lib/gitea"
GITEA_PORT="3000"
DOMAIN="git.netgescon.local"

echo "📋 Configurazione Git Server:"
echo "   Software: Gitea v$GITEA_VERSION"
echo "   Utente: $GITEA_USER"
echo "   Home: $GITEA_HOME"
echo "   Porta: $GITEA_PORT"
echo "   Dominio: $DOMAIN"
echo ""

# === 1. CONTROLLO PREREQUISITI ===
echo "🔍 1. Controllo prerequisiti..."

if [ "$EUID" -ne 0 ]; then
    echo "❌ Questo script deve essere eseguito come root"
    exit 1
fi

# Controlla se Docker è installato
if ! command -v docker &> /dev/null; then
    echo "📦 Installazione Docker..."
    curl -fsSL https://get.docker.com -o get-docker.sh
    sh get-docker.sh
    systemctl enable docker
    systemctl start docker
    echo "   ✅ Docker installato"
else
    echo "   ✅ Docker già presente"
fi

# === 2. CREAZIONE UTENTE GITEA ===
echo ""
echo "👤 2. Creazione utente Gitea..."

if ! id "$GITEA_USER" &>/dev/null; then
    useradd --system --shell /bin/bash --home "$GITEA_HOME" --create-home "$GITEA_USER"
    echo "   ✅ Utente $GITEA_USER creato"
else
    echo "   ✅ Utente $GITEA_USER già esistente"
fi

# === 3. CREAZIONE DIRECTORY ===
echo ""
echo "📁 3. Creazione directory di lavoro..."

mkdir -p "$GITEA_HOME"/{data,config}
mkdir -p /var/log/gitea
chown -R "$GITEA_USER:$GITEA_USER" "$GITEA_HOME"
chown -R "$GITEA_USER:$GITEA_USER" /var/log/gitea
echo "   ✅ Directory create"

# === 4. SETUP GITEA CON DOCKER ===
echo ""
echo "🐳 4. Setup Gitea con Docker..."

# Crea docker-compose.yml
cat > /opt/gitea-docker-compose.yml << 'EOF'
version: '3.8'

services:
  gitea:
    image: gitea/gitea:1.21.0
    container_name: netgescon-gitea
    restart: unless-stopped
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - GITEA__database__DB_TYPE=sqlite3
      - GITEA__database__PATH=/data/gitea/gitea.db
      - GITEA__server__DOMAIN=git.netgescon.local
      - GITEA__server__SSH_DOMAIN=git.netgescon.local
      - GITEA__server__ROOT_URL=http://git.netgescon.local:3000/
    ports:
      - "3000:3000"
      - "2222:22"
    volumes:
      - /var/lib/gitea:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    networks:
      - gitea-network

networks:
  gitea-network:
    driver: bridge
EOF

echo "   ✅ Docker Compose configurato"

# Avvia Gitea
cd /opt
docker-compose -f gitea-docker-compose.yml up -d

echo "   ✅ Gitea avviato"

# === 5. CONFIGURAZIONE NGINX ===
echo ""
echo "🌐 5. Configurazione Nginx..."

# Installa Nginx se non presente
if ! command -v nginx &> /dev/null; then
    apt update
    apt install -y nginx
    systemctl enable nginx
    echo "   ✅ Nginx installato"
fi

# Configurazione Nginx per Gitea
cat > /etc/nginx/sites-available/gitea << 'EOF'
server {
    listen 80;
    server_name git.netgescon.local;

    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
EOF

# Abilita il sito
ln -sf /etc/nginx/sites-available/gitea /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx

echo "   ✅ Nginx configurato"

# === 6. CONFIGURAZIONE FIREWALL ===
echo ""
echo "🔥 6. Configurazione firewall..."

ufw allow 3000/tcp comment "Gitea"
ufw allow 2222/tcp comment "Gitea SSH"
ufw allow 80/tcp comment "Nginx"

echo "   ✅ Firewall configurato"

# === 7. SCRIPT DI GESTIONE ===
echo ""
echo "🛠️ 7. Creazione script di gestione..."

cat > /usr/local/bin/gitea-manager << 'EOF'
#!/bin/bash
# Script di gestione Gitea NetGescon

case "$1" in
    start)
        cd /opt && docker-compose -f gitea-docker-compose.yml up -d
        echo "Gitea avviato"
        ;;
    stop)
        cd /opt && docker-compose -f gitea-docker-compose.yml down
        echo "Gitea fermato"
        ;;
    restart)
        cd /opt && docker-compose -f gitea-docker-compose.yml restart
        echo "Gitea riavviato"
        ;;
    status)
        cd /opt && docker-compose -f gitea-docker-compose.yml ps
        ;;
    logs)
        cd /opt && docker-compose -f gitea-docker-compose.yml logs -f
        ;;
    backup)
        tar -czf /backup/gitea-$(date +%Y%m%d-%H%M).tar.gz /var/lib/gitea
        echo "Backup creato in /backup/"
        ;;
    *)
        echo "Uso: $0 {start|stop|restart|status|logs|backup}"
        exit 1
        ;;
esac
EOF

chmod +x /usr/local/bin/gitea-manager
echo "   ✅ Script di gestione creato: gitea-manager"

# === 8. RIEPILOGO ===
echo ""
echo "📊 === RIEPILOGO SETUP GIT SERVER ==="
echo "✅ Gitea installato e configurato"
echo "✅ Docker e Nginx configurati"
echo "✅ Firewall configurato"
echo "✅ Script di gestione creato"
echo ""

echo "🌐 Accesso:"
echo "   URL: http://git.netgescon.local:3000"
echo "   SSH: ssh://git@git.netgescon.local:2222"
echo ""

echo "🛠️ Gestione:"
echo "   Avvia: gitea-manager start"
echo "   Stop: gitea-manager stop"
echo "   Status: gitea-manager status"
echo "   Logs: gitea-manager logs"
echo "   Backup: gitea-manager backup"
echo ""

echo "📋 Prossimi passi:"
echo "1. 🌐 Aprire http://git.netgescon.local:3000 e completare setup iniziale"
echo "2. 👤 Creare utente amministratore"
echo "3. 🏢 Creare organizzazione 'netgescon'"
echo "4. 📦 Creare repositories: netgescon-main, netgescon-plugins, etc."
echo "5. 🔑 Configurare chiavi SSH per sviluppatori"
echo ""

echo "🎯 Setup Git Server completato!"
echo "📅 $(date '+%Y-%m-%d %H:%M:%S')"
