#!/bin/bash

# HoofScan Pro Server Installation Script
# Für app1.fr.vps.apmin.ch

set -e

echo "🚀 HoofScan Pro Server Installation gestartet..."

# Check if running as root
if [[ $EUID -eq 0 ]]; then
   echo "❌ Bitte führen Sie dieses Script NICHT als root aus!"
   echo "Führen Sie es als normaler Benutzer aus, der sudo-Rechte hat."
   exit 1
fi

# Update System
echo "📦 System-Updates installieren..."
sudo apt update && sudo apt upgrade -y

# Install Node.js 20
echo "📦 Node.js 20 installieren..."
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs

# Install PM2 globally
echo "📦 PM2 Process Manager installieren..."
sudo npm install -g pm2

# Install Nginx
echo "📦 Nginx installieren..."
sudo apt install -y nginx

# Install PostgreSQL
echo "📦 PostgreSQL installieren..."
sudo apt install -y postgresql postgresql-contrib

# Create application directory
echo "📁 Anwendungsverzeichnis erstellen..."
sudo mkdir -p /var/www/hoofscan-pro
sudo chown -R $USER:$USER /var/www/hoofscan-pro
cd /var/www/hoofscan-pro

# Download and extract application
echo "📥 HoofScan Pro herunterladen..."
if [ -f "hoofscan-deployment.tar.gz" ]; then
    echo "✅ Deployment-Archiv gefunden, extrahiere..."
    tar -xzf hoofscan-deployment.tar.gz
else
    echo "❌ hoofscan-deployment.tar.gz nicht gefunden!"
    echo "Bitte laden Sie das Deployment-Archiv hoch und führen Sie das Script erneut aus."
    exit 1
fi

# Install dependencies
echo "📦 NPM Dependencies installieren..."
npm ci --production

# Install tsx globally for TypeScript execution
echo "📦 TypeScript Execution Engine installieren..."
sudo npm install -g tsx

# Setup PostgreSQL Database
echo "🗄️ PostgreSQL Datenbank einrichten..."
sudo -u postgres createuser --interactive --pwprompt hoofscanuser || echo "Benutzer existiert bereits"
sudo -u postgres createdb -O hoofscanuser hoofscanpro || echo "Datenbank existiert bereits"

# Create environment file
echo "⚙️ Umgebungsvariablen konfigurieren..."
cat > .env.production << EOF
NODE_ENV=production
PORT=3000
HOST=0.0.0.0
DATABASE_URL=postgresql://hoofscanuser:CHANGE_PASSWORD@localhost:5432/hoofscanpro

# E-Mail Configuration (Optional - Brevo)
BREVO_API_KEY=your_brevo_api_key_here

# Weather API (Optional - OpenWeatherMap)
OPENWEATHER_API_KEY=your_openweather_api_key_here

# Session Secret (WICHTIG: Ändern Sie dies!)
SESSION_SECRET=change_this_to_random_secure_string

# Security
CORS_ORIGIN=https://app1.fr.vps.apmin.ch
TRUSTED_DOMAINS=app1.fr.vps.apmin.ch
EOF

echo "⚠️  WICHTIG: Bearbeiten Sie die .env.production Datei und setzen Sie sichere Werte!"

# Setup log directory
echo "📝 Log-Verzeichnis einrichten..."
sudo mkdir -p /var/log/pm2
sudo chown -R $USER:$USER /var/log/pm2

# Configure Nginx
echo "🌐 Nginx konfigurieren..."
sudo cp nginx.conf /etc/nginx/sites-available/hoofscan-pro
sudo ln -sf /etc/nginx/sites-available/hoofscan-pro /etc/nginx/sites-enabled/
sudo rm -f /etc/nginx/sites-enabled/default

# Test Nginx configuration
sudo nginx -t

# Setup SSL with Let's Encrypt
echo "🔒 SSL-Zertifikat einrichten..."
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d app1.fr.vps.apmin.ch --non-interactive --agree-tos --email admin@apmin.ch || echo "SSL-Setup fehlgeschlagen - bitte manuell konfigurieren"

# Generate DH parameters
echo "🔐 DH-Parameter generieren..."
sudo openssl dhparam -out /etc/nginx/dhparam.pem 2048

# Build application
echo "🔨 Anwendung kompilieren..."
npm run build

# Push database schema
echo "🗄️ Datenbank-Schema erstellen..."
npm run db:push

# Start application with PM2
echo "🚀 Anwendung starten..."
pm2 start ecosystem.config.js --env production
pm2 save
pm2 startup

# Restart services
echo "🔄 Services neustarten..."
sudo systemctl restart nginx
sudo systemctl enable nginx

# Final status check
echo "🔍 Status-Überprüfung..."
pm2 status
sudo systemctl status nginx --no-pager

echo ""
echo "✅ HoofScan Pro Installation abgeschlossen!"
echo ""
echo "🌐 Die Anwendung sollte jetzt unter https://app1.fr.vps.apmin.ch erreichbar sein"
echo ""
echo "📋 Nächste Schritte:"
echo "1. Bearbeiten Sie /var/www/hoofscan-pro/.env.production mit sicheren Werten"
echo "2. Starten Sie die Anwendung neu: pm2 restart hoofscan-pro"
echo "3. Überwachen Sie die Logs: pm2 logs hoofscan-pro"
echo ""
echo "🛠️ Wichtige Befehle:"
echo "- pm2 status                 # Status anzeigen"
echo "- pm2 logs hoofscan-pro      # Logs anzeigen"
echo "- pm2 restart hoofscan-pro   # Neustart"
echo "- pm2 stop hoofscan-pro      # Stoppen"
echo "- pm2 delete hoofscan-pro    # Entfernen"
echo ""