#!/bin/bash
# ============================================================================
# run_test.sh - Führt Tests für eine einzelne DXF-Datei aus
#
# Usage:
#   run_test.sh <filename>           - Führt getexdraw Test aus
#   run_test.sh <filename> --clean   - Führt Test aus und räumt auf
#   run_test.sh <filename> --ioconverter - Führt ioconverter Test aus
#   run_test.sh <filename> --translation - Führt translation Test aus
#
# Der Dateiname kann mit oder ohne .dxf Erweiterung angegeben werden.
# Die Datei wird standardmäßig im testdata Ordner gesucht.
# ============================================================================

# Funktion für Usage-Ausgabe
usage() {
    echo ""
    echo "Usage: $(basename "$0") <filename> [OPTIONS]"
    echo ""
    echo "Argumente:"
    echo "  filename          Name der DXF-Datei (mit oder ohne .dxf Erweiterung)"
    echo "                    Die Datei wird im testdata Ordner gesucht."
    echo ""
    echo "Optionen:"
    echo "  --clean           Räumt das work-Verzeichnis nach dem Test auf"
    echo "  --ioconverter     Führt ioconverter Test aus (statt getexdraw)"
    echo "  --translation     Führt translation Test aus (statt getexdraw)"
    echo ""
    echo "Beispiele:"
    echo "  $(basename "$0") easy"
    echo "  $(basename "$0") easy.dxf"
    echo "  $(basename "$0") easy --clean"
    echo "  $(basename "$0") easy --ioconverter"
    echo "  $(basename "$0") Erdungsbsp --translation"
    echo ""
    exit 1
}

# Prüfe ob Parameter übergeben wurde
if [ $# -eq 0 ]; then
    usage
fi

# Bestimme das Skript-Verzeichnis
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

# Umgebungsvariablen laden
source "$SCRIPT_DIR/setenv.sh"

# Lade lokale Umgebungseinstellungen falls vorhanden
if [ -f "$SCRIPT_DIR/_setenv.sh" ]; then
    echo "Lade lokale Umgebungseinstellungen aus _setenv.sh..."
    source "$SCRIPT_DIR/_setenv.sh"
fi

# Dateinamen extrahieren (ohne Pfad und ohne .dxf Erweiterung)
FILENAME=$(basename "$1" .dxf)

# Prüfe ob Datei im testdata Ordner existiert
if [ ! -f "$PROJECT_TEST/$FILENAME.dxf" ]; then
    echo "Fehler: Datei $FILENAME.dxf nicht gefunden in $PROJECT_TEST"
    usage
fi

# Sammle Parameter für run_tests.py
TEST_PARAMS="--file $FILENAME"

# Verarbeite zusätzliche Parameter
shift
while [ $# -gt 0 ]; do
    case "$1" in
        --clean)
            TEST_PARAMS="$TEST_PARAMS --clean"
            ;;
        --ioconverter)
            TEST_PARAMS="$TEST_PARAMS --ioconverter"
            ;;
        --translation)
            TEST_PARAMS="$TEST_PARAMS --translation"
            ;;
        *)
            # Unbekannte Parameter ignorieren
            ;;
    esac
    shift
done

echo ""
echo "============================================================================"
echo "Führe Test aus für: $FILENAME.dxf"
echo "Test-Parameter: $TEST_PARAMS"
echo "============================================================================"
echo ""

# Python-Umgebung aktivieren
source "$SCRIPT_DIR/manage_interpreter.sh" activate

if [ $? -ne 0 ]; then
    echo "ERROR: Failed to activate Python environment"
    exit 1
fi

# Wechsle ins Projektverzeichnis und führe run_tests.py aus
pushd "$PROJECT" > /dev/null

"$VIRTUAL_ENV/bin/python" -m lib.run_tests $TEST_PARAMS
TEST_RESULT=$?

popd > /dev/null

# Python-Umgebung deaktivieren
source "$SCRIPT_DIR/manage_interpreter.sh" deactivate

echo ""
echo "============================================================================"
if [ $TEST_RESULT -eq 0 ]; then
    echo "Test erfolgreich abgeschlossen für: $FILENAME.dxf"
else
    echo "Test fehlgeschlagen für: $FILENAME.dxf"
fi
echo "============================================================================"
echo ""

exit $TEST_RESULT
