#!/bin/bash

# ZYS Hotel - Server Start Script
# Dieses Script startet die vollständige Anwendung in Produktionsumgebung

echo "🚀 ZYS Hotel Server wird gestartet..."

# Überprüfen ob Node.js installiert ist
if ! command -v node &> /dev/null; then
    echo "❌ Node.js ist nicht installiert!"
    echo "Bitte installieren Sie Node.js 18+ von: https://nodejs.org/"
    exit 1
fi

# Node.js Version prüfen
NODE_VERSION=$(node --version | cut -d'v' -f2 | cut -d'.' -f1)
if [ "$NODE_VERSION" -lt 18 ]; then
    echo "❌ Node.js Version 18+ erforderlich! Aktuelle Version: $(node --version)"
    exit 1
fi

# Überprüfen ob .env existiert
if [ ! -f .env ]; then
    echo "⚠️  .env Datei nicht gefunden!"
    echo "Erstelle .env aus Template..."
    if [ -f .env.example ]; then
        cp .env.example .env
        echo "✅ .env Datei erstellt. Bitte konfigurieren Sie:"
        echo "   - DATABASE_URL"
        echo "   - JWT_SECRET"
        echo "   - SESSION_SECRET"
        echo ""
        echo "Dann starten Sie das Script erneut."
        exit 1
    else
        echo "❌ .env.example nicht gefunden!"
        exit 1
    fi
fi

# Überprüfen ob dist/ existiert
if [ ! -d "dist" ]; then
    echo "❌ dist/ Ordner nicht gefunden!"
    echo "Bitte führen Sie zuerst 'npm run build' aus."
    exit 1
fi

# Überprüfen ob package.json existiert
if [ ! -f package.json ]; then
    echo "❌ package.json nicht gefunden!"
    exit 1
fi

# Dependencies installieren falls node_modules nicht existiert
if [ ! -d "node_modules" ]; then
    echo "📦 Installiere Dependencies..."
    npm install --production
    if [ $? -ne 0 ]; then
        echo "❌ Fehler beim Installieren der Dependencies!"
        exit 1
    fi
fi

# Environment laden
export NODE_ENV=production

echo "🔍 Überprüfe Konfiguration..."

# Grundlegende Environment Variablen prüfen
if [ -z "$DATABASE_URL" ] && ! grep -q "DATABASE_URL" .env; then
    echo "⚠️  DATABASE_URL ist nicht konfiguriert!"
fi

if [ -z "$JWT_SECRET" ] && ! grep -q "JWT_SECRET" .env; then
    echo "⚠️  JWT_SECRET ist nicht konfiguriert!"
fi

# Port aus .env lesen oder Standard verwenden
PORT=$(grep PORT .env | cut -d '=' -f2 || echo "5000")
PORT=${PORT:-5000}

echo "📊 Server Informationen:"
echo "   Node.js Version: $(node --version)"
echo "   Environment: $NODE_ENV"
echo "   Port: $PORT"
echo ""

# Prüfen ob Port bereits belegt ist
if lsof -Pi :$PORT -sTCP:LISTEN -t >/dev/null ; then
    echo "⚠️  Port $PORT ist bereits belegt!"
    echo "Andere Prozesse auf diesem Port:"
    lsof -Pi :$PORT -sTCP:LISTEN
    echo ""
    read -p "Möchten Sie fortfahren? (y/N): " -n 1 -r
    echo
    if [[ ! $REPLY =~ ^[Yy]$ ]]; then
        echo "❌ Abgebrochen"
        exit 1
    fi
fi

echo "🚀 Starte ZYS Hotel Server..."
echo "   Zugriff über: http://localhost:$PORT"
echo "   Admin Panel: http://localhost:$PORT/admin"
echo ""
echo "Drücken Sie Ctrl+C zum Beenden"
echo "=================================="

# Server starten
exec node dist/index.js