#!/bin/bash
# Flask HTML-Formular Test Automator - Setup Skript
# =================================================

echo "🧪 Flask HTML-Formular Test Automator Setup"
echo "============================================"

# Farben für Ausgabe
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# Funktionen
print_status() {
    echo -e "${BLUE}[INFO]${NC} $1"
}

print_success() {
    echo -e "${GREEN}[SUCCESS]${NC} $1"
}

print_warning() {
    echo -e "${YELLOW}[WARNING]${NC} $1"
}

print_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# Python-Version prüfen
print_status "Prüfe Python-Version..."
python_version=$(python3 -c "import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}')")
required_version="3.8"

if python3 -c "import sys; exit(0 if sys.version_info >= (3, 8) else 1)"; then
    print_success "Python $python_version ist kompatibel (benötigt: $required_version+)"
else
    print_error "Python $required_version oder höher erforderlich (gefunden: $python_version)"
    exit 1
fi

# Virtual Environment erstellen (optional)
if [ "$1" = "--venv" ]; then
    print_status "Erstelle Virtual Environment..."
    python3 -m venv form_tester_env
    source form_tester_env/bin/activate
    print_success "Virtual Environment aktiviert"
fi

# Python-Dependencies installieren
print_status "Installiere Python-Dependencies..."
if [ -f "requirements_form_tester.txt" ]; then
    if python3 -m pip install -r requirements_form_tester.txt; then
        print_success "Python-Dependencies installiert"
    else
        print_error "Fehler beim Installieren der Python-Dependencies"
        exit 1
    fi
else
    print_warning "requirements_form_tester.txt nicht gefunden, installiere Basis-Dependencies..."
    python3 -m pip install playwright faker beautifulsoup4 rich
fi

# Playwright Browser installieren
print_status "Installiere Playwright Browser..."
if python3 -m playwright install chromium firefox webkit; then
    print_success "Playwright Browser installiert"
else
    print_error "Fehler beim Installieren der Playwright Browser"
    exit 1
fi

# Zusätzliche Systemabhängigkeiten für Linux
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
    print_status "Installiere System-Dependencies für Linux..."
    
    # Detect package manager
    if command -v apt-get &> /dev/null; then
        sudo apt-get update
        sudo apt-get install -y \
            libnss3 \
            libnspr4 \
            libatk-bridge2.0-0 \
            libdrm2 \
            libxkbcommon0 \
            libgtk-3-0 \
            libatspi2.0-0 \
            libx11-xcb1 \
            libxcomposite1 \
            libxdamage1 \
            libxrandr2 \
            libgbm1 \
            libxss1 \
            libasound2
        print_success "System-Dependencies installiert"
    elif command -v yum &> /dev/null; then
        sudo yum install -y \
            nss \
            nspr \
            at-spi2-atk \
            libdrm \
            libxkbcommon \
            gtk3 \
            at-spi2-core \
            libXcomposite \
            libXdamage \
            libXrandr \
            mesa-libgbm \
            libXScrnSaver \
            alsa-lib
        print_success "System-Dependencies installiert"
    else
        print_warning "Unbekannter Package Manager, überspringe System-Dependencies"
    fi
fi

# Test-Verzeichnis erstellen
print_status "Erstelle Test-Verzeichnisse..."
mkdir -p form_test_reports
mkdir -p form_test_reports/screenshots
mkdir -p form_test_reports/videos
mkdir -p form_test_reports/reports
print_success "Test-Verzeichnisse erstellt"

# Ausführungsrechte setzen
print_status "Setze Ausführungsrechte..."
chmod +x form_test_automator.py
chmod +x test_forms_example.py
print_success "Ausführungsrechte gesetzt"

# Verfügbarkeit testen
print_status "Teste Installation..."
if python3 -c "from playwright.async_api import async_playwright; print('Playwright OK')"; then
    print_success "Playwright erfolgreich installiert"
else
    print_error "Playwright-Test fehlgeschlagen"
    exit 1
fi

if python3 -c "from faker import Faker; print('Faker OK')"; then
    print_success "Faker erfolgreich installiert"
else
    print_warning "Faker nicht verfügbar (optional)"
fi

if python3 -c "from bs4 import BeautifulSoup; print('BeautifulSoup OK')"; then
    print_success "BeautifulSoup erfolgreich installiert"
else
    print_warning "BeautifulSoup nicht verfügbar (optional)"
fi

if python3 -c "from rich.console import Console; print('Rich OK')"; then
    print_success "Rich erfolgreich installiert"
else
    print_warning "Rich nicht verfügbar (optional)"
fi

# Beispiel-Konfiguration erstellen
print_status "Erstelle Beispiel-Konfiguration..."
cat > form_tester_config.json << EOF
{
    "base_url": "http://localhost:5000",
    "browser": "chromium",
    "headless": true,
    "viewport": {
        "width": 1280,
        "height": 720
    },
    "default_scenarios": [
        "valid",
        "invalid", 
        "accessibility"
    ],
    "test_devices": [
        "iPhone SE",
        "iPhone 12",
        "iPad",
        "Desktop 1280x720"
    ],
    "output_directory": "form_test_reports",
    "screenshot_on_failure": true,
    "video_recording": false
}
EOF
print_success "Beispiel-Konfiguration erstellt: form_tester_config.json"

# Erfolgreiche Installation
echo ""
echo "🎉 Installation erfolgreich abgeschlossen!"
echo "========================================="
echo ""
echo "📋 NÄCHSTE SCHRITTE:"
echo ""
echo "1. Flask-App starten:"
echo "   python app.py"
echo ""
echo "2. Formular-Tests ausführen:"
echo "   python form_test_automator.py --url http://localhost:5000 --test-all"
echo ""
echo "3. MYP-spezifische Tests:"
echo "   python test_forms_example.py"
echo ""
echo "4. CLI-Hilfe anzeigen:"
echo "   python form_test_automator.py --help"
echo ""
echo "📁 AUSGABE-VERZEICHNISSE:"
echo "   • Screenshots: form_test_reports/screenshots/"
echo "   • Videos: form_test_reports/videos/"
echo "   • Reports: form_test_reports/reports/"
echo ""
echo "🔧 KONFIGURATION:"
echo "   • Anpassen in: form_tester_config.json"
echo ""

if [ "$1" = "--venv" ]; then
    echo "💡 Virtual Environment aktiviert. Zum Deaktivieren:"
    echo "   deactivate"
fi

echo ""
echo "🧪 Flask HTML-Formular Test Automator bereit!"