#!/bin/bash
# test_dicom2pacs.sh - Automatisiertes Testskript für dicom2pacs

set -e  # Beende bei Fehlern

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

echo "=== dicom2pacs Test-Suite ==="
echo ""

# 1. Prüfe ob venv existiert
if [ ! -d "venv" ]; then
    echo -e "${YELLOW}Warnung: venv nicht gefunden. Erstelle es...${NC}"
    python3 -m venv venv
fi

# 2. Aktiviere venv
echo "Aktiviere virtuelles Environment..."
source venv/bin/activate

# 3. Prüfe ob pydicom installiert ist
if ! python3 -c "import pydicom" 2>/dev/null; then
    echo "Installiere pydicom..."
    pip install pydicom
fi

# 4. Erstelle Test-Ordner
TEST_DIR="$HOME/Downloads/test_dicom"
echo ""
echo "Erstelle Test-Ordner: $TEST_DIR"
mkdir -p "$TEST_DIR"

# 5. Kopiere Test-DICOM-Dateien
echo "Kopiere Test-DICOM-Dateien..."

# Prüfe ob gebaute App existiert
if [ -d "dist/dicom2pacs.app" ]; then
    PYDICOM_PATH="dist/dicom2pacs.app/Contents/Resources/lib/python3.13/pydicom/data/test_files"
    if [ -d "$PYDICOM_PATH" ]; then
        cp "$PYDICOM_PATH/CT_small.dcm" "$TEST_DIR/" 2>/dev/null || echo "CT_small.dcm nicht gefunden"
        cp "$PYDICOM_PATH/MR_small.dcm" "$TEST_DIR/" 2>/dev/null || echo "MR_small.dcm nicht gefunden"
        cp "$PYDICOM_PATH/image_dfl.dcm" "$TEST_DIR/" 2>/dev/null || echo "image_dfl.dcm nicht gefunden"
    fi
fi

# Alternative: Prüfe ob pydicom im venv installiert ist
if [ -d "venv/lib/python3.13/site-packages/pydicom/data/test_files" ]; then
    PYDICOM_VENV_PATH="venv/lib/python3.13/site-packages/pydicom/data/test_files"
    cp "$PYDICOM_VENV_PATH/CT_small.dcm" "$TEST_DIR/" 2>/dev/null || true
    cp "$PYDICOM_VENV_PATH/MR_small.dcm" "$TEST_DIR/" 2>/dev/null || true
    cp "$PYDICOM_VENV_PATH/image_dfl.dcm" "$TEST_DIR/" 2>/dev/null || true
fi

# Prüfe ob Dateien kopiert wurden
DICOM_COUNT=$(find "$TEST_DIR" -name "*.dcm" 2>/dev/null | wc -l | tr -d ' ')
if [ "$DICOM_COUNT" -eq 0 ]; then
    echo -e "${RED}FEHLER: Keine DICOM-Testdateien gefunden!${NC}"
    echo "Bitte manuell DICOM-Dateien nach $TEST_DIR kopieren"
    exit 1
fi

echo -e "${GREEN}✓ $DICOM_COUNT DICOM-Dateien gefunden${NC}"

# 6. Prüfe Konfiguration
echo ""
echo "Prüfe Konfiguration..."
CONFIG_FILE="$HOME/.dicom2pacs.conf"
if [ ! -f "$CONFIG_FILE" ]; then
    echo -e "${YELLOW}Konfigurationsdatei nicht gefunden. Wird beim ersten Start erstellt.${NC}"
else
    echo -e "${GREEN}✓ Konfigurationsdatei gefunden${NC}"
    cat "$CONFIG_FILE"
fi

# 7. Test-Parameter
TEST_NAME="Mustermann"
TEST_VORNAME="Max"
TEST_GEBURTSDATUM="19800101"
TEST_PATIENTEN_ID="TEST12345"

echo ""
echo "=== Test-Parameter ==="
echo "Name: $TEST_NAME"
echo "Vorname: $TEST_VORNAME"
echo "Geburtsdatum: $TEST_GEBURTSDATUM"
echo "Patienten-ID: $TEST_PATIENTEN_ID"
echo "Test-Ordner: $TEST_DIR"
echo ""

# 8. Prüfe ob App existiert
if [ ! -f "dicom2pacs.py" ]; then
    echo -e "${RED}FEHLER: dicom2pacs.py nicht gefunden!${NC}"
    exit 1
fi

# 9. Test-Menü
echo "=== Test-Menü ==="
echo "1. GUI-Test (manuell - App öffnet sich)"
echo "2. Unit-Test (prüft Module ohne GUI)"
echo "3. Integrationstest (vollständiger Test)"
echo "4. Aufräumen (löscht Test-Ordner)"
echo ""
read -p "Wählen Sie eine Option (1-4): " choice

case $choice in
    1)
        echo ""
        echo -e "${GREEN}Starte GUI-Test...${NC}"
        echo "Die App öffnet sich jetzt."
        echo "Bitte wählen Sie den Ordner: $TEST_DIR"
        echo ""
        python dicom2pacs.py "$TEST_NAME" "$TEST_VORNAME" "$TEST_GEBURTSDATUM" "$TEST_PATIENTEN_ID"
        ;;
    2)
        echo ""
        echo -e "${GREEN}Starte Unit-Tests...${NC}"
        python3 << 'EOF'
import sys
import os
sys.path.insert(0, os.getcwd())

print("Teste dicom_processing...")
try:
    import dicom_processing
    print("✓ dicom_processing importiert")
    
    # Test is_dicom_file
    test_file = os.path.expanduser("~/Downloads/test_dicom/CT_small.dcm")
    if os.path.exists(test_file):
        result = dicom_processing.is_dicom_file(test_file)
        print(f"✓ is_dicom_file: {result}")
    else:
        print("⚠ Test-Datei nicht gefunden")
except Exception as e:
    print(f"✗ Fehler: {e}")

print("\nTeste file_management...")
try:
    import file_management
    print("✓ file_management importiert")
    
    test_dir = os.path.expanduser("~/Downloads/test_dicom")
    if os.path.exists(test_dir):
        files = file_management.find_dicom_files(test_dir)
        if files != 'non_found':
            dicom_files, count = files
            print(f"✓ find_dicom_files: {count} Dateien gefunden")
        else:
            print("⚠ Keine DICOM-Dateien gefunden")
    else:
        print("⚠ Test-Ordner nicht gefunden")
except Exception as e:
    print(f"✗ Fehler: {e}")

print("\nTeste network_utils...")
try:
    import network_utils
    print("✓ network_utils importiert")
except Exception as e:
    print(f"✗ Fehler: {e}")

print("\n✓ Unit-Tests abgeschlossen")
EOF
        ;;
    3)
        echo ""
        echo -e "${GREEN}Starte Integrationstest...${NC}"
        echo "Dieser Test führt die App im Hintergrund aus."
        echo "Bitte beachten Sie, dass die GUI geöffnet wird."
        echo ""
        read -p "Fortfahren? (j/n): " confirm
        if [ "$confirm" = "j" ] || [ "$confirm" = "J" ]; then
            python dicom2pacs.py "$TEST_NAME" "$TEST_VORNAME" "$TEST_GEBURTSDATUM" "$TEST_PATIENTEN_ID" &
            echo "App gestartet. PID: $!"
            echo "Bitte testen Sie die App manuell."
        fi
        ;;
    4)
        echo ""
        echo -e "${YELLOW}Lösche Test-Ordner...${NC}"
        if [ -d "$TEST_DIR" ]; then
            rm -rf "$TEST_DIR"
            echo -e "${GREEN}✓ Test-Ordner gelöscht${NC}"
        else
            echo "Test-Ordner existiert nicht"
        fi
        
        # Lösche auch Transfer-Ordner falls vorhanden
        TRANSFER_DIR="$HOME/Downloads/D2OTrans"
        if [ -d "$TRANSFER_DIR" ]; then
            echo "Lösche Transfer-Ordner..."
            rm -rf "$TRANSFER_DIR"
            echo -e "${GREEN}✓ Transfer-Ordner gelöscht${NC}"
        fi
        ;;
    *)
        echo -e "${RED}Ungültige Option${NC}"
        exit 1
        ;;
esac

echo ""
echo -e "${GREEN}=== Test abgeschlossen ===${NC}"
