#!/bin/bash
# =============================================================================
# SHACL VALIDATE — triplestore/shacl-validate.sh
# Valide un graphe TTL client contre les shapes SHACL AI Act
# Usage : ./shacl-validate.sh <fichier.ttl> [--strict]
# =============================================================================

set -euo pipefail

TTL_FILE="${1:-}"
STRICT="${2:-}"

if [[ -z "$TTL_FILE" ]]; then
    echo "Usage: $0 <fichier.ttl> [--strict]"
    exit 1
fi

if [[ ! -f "$TTL_FILE" ]]; then
    echo "❌ Fichier introuvable : $TTL_FILE"
    exit 1
fi

echo "🔍 Validation SHACL — AI Act Audit Trail"
echo "   Fichier : $TTL_FILE"
echo ""

# Option 1 : Apache Jena SHACL (recommandé)
if command -v shacl &> /dev/null; then
    echo "→ Moteur : Apache Jena SHACL"
    shacl validate \
        --shapes "$TTL_FILE" \
        --data   "$TTL_FILE" \
        --output text

# Option 2 : pyshacl (Python)
elif command -v pyshacl &> /dev/null; then
    echo "→ Moteur : pyshacl"
    pyshacl \
        -s "$TTL_FILE" \
        -d "$TTL_FILE" \
        -f human \
        -i rdfs

# Option 3 : curl vers endpoint Fuseki SHACL
else
    echo "⚠  Aucun moteur SHACL local détecté."
    echo "   Installation :"
    echo "     Apache Jena : https://jena.apache.org/download/"
    echo "     pyshacl     : pip install pyshacl"
    echo ""
    echo "   Validation via API Fuseki (si disponible) :"
    echo "   curl -X POST http://localhost:3030/aiact/shacl \\"
    echo "        -H 'Content-Type: text/turtle' \\"
    echo "        --data-binary @${TTL_FILE}"
    exit 1
fi

EXIT_CODE=$?
if [[ $EXIT_CODE -eq 0 ]]; then
    echo ""
    echo "✅ Validation SHACL : conforme"
    echo "   Le graphe peut être chargé dans le triplestore."
    echo "   Commande : ./loader.sh $TTL_FILE <graph-uri>"
else
    echo ""
    echo "❌ Validation SHACL : violations détectées"
    if [[ "$STRICT" == "--strict" ]]; then
        echo "   Mode strict : chargement bloqué."
        exit 1
    else
        echo "   Mode permissif : corrigez les violations avant déploiement production."
    fi
fi
