#!/bin/bash

# Skript zur Überprüfung der YAML-Syntax in Ansible-Dateien
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

# Farbdefinitionen
GREEN="\033[0;32m"
YELLOW="\033[1;33m"
RED="\033[0;31m"
NC="\033[0m" # No Color

echo -e "${GREEN}=== Überprüfe YAML-Syntax in Ansible-Dateien ===${NC}\n"

# Fehler-Zähler
errors=0

# Prüfe alle .yml-Dateien im Ansible-Verzeichnis
find "$SCRIPT_DIR" -name "*.yml" | sort | while read -r file; do
    # Überspringe bestimmte Verzeichnisse
    if [[ "$file" == *"/templates/"* ]]; then
        continue
    fi

    echo -e "Prüfe: ${YELLOW}$(basename "$file")${NC} (${file})"

    # Prüfe ob die Datei leer ist
    if [ ! -s "$file" ]; then
        echo -e "  ${YELLOW}Warnung: Datei ist leer${NC}"
        continue
    fi

    # Überprüfung mit ansible-playbook syntax-check
    if grep -q "^---" "$file"; then
        ansible-playbook --syntax-check "$file" &>/dev/null
        if [ $? -ne 0 ]; then
            echo -e "  ${RED}Fehler: Syntax-Fehler in der Datei${NC}"
            echo -e "  Detaillierte Prüfung:"
            ansible-playbook --syntax-check "$file"
            errors=$((errors+1))
            continue
        fi
    fi

    # Überprüfung mit yamllint
    if command -v yamllint &>/dev/null; then
        yamllint -d relaxed "$file" &>/dev/null
        if [ $? -ne 0 ]; then
            echo -e "  ${YELLOW}Warnung: yamllint hat Probleme gefunden${NC}"
            yamllint -d relaxed "$file"
        fi
    fi

    # Überprüfung auf mehrere YAML-Dokumente
    doc_count=$(grep -c "^---" "$file")
    if [ "$doc_count" -gt 1 ]; then
        echo -e "  ${RED}Fehler: Mehrere YAML-Dokumente in einer Datei (${doc_count} Dokumente)${NC}"
        echo -e "  Betroffene Zeilen:"
        grep -n "^---" "$file"
        errors=$((errors+1))
    fi

    # Wenn alles ok ist
    if [ "$errors" -eq 0 ]; then
        echo -e "  ${GREEN}✓ OK${NC}"
    fi
done

if [ "$errors" -gt 0 ]; then
    echo -e "\n${RED}Fehler gefunden! $errors Dateien haben Probleme.${NC}"
    echo -e "Bitte korrigieren Sie die YAML-Syntax-Fehler, bevor Sie fortfahren."
    exit 1
else
    echo -e "\n${GREEN}Alle YAML-Dateien haben die Syntax-Prüfung bestanden!${NC}"
    exit 0
fi
