#!/bin/bash
# Script pour promouvoir l'utilisateur de test en "artist"
# Usage: ./setup-test-user-role.sh

set -e

# Configuration par défaut (peut être surchargée par variables d'environnement)
# Valeurs par défaut basées sur docker-compose.yml du projet
DB_HOST="${DB_HOST:-localhost}"
DB_PORT="${DB_PORT:-5432}"
DB_NAME="${DB_NAME:-veza}"
DB_USER="${DB_USER:-veza}"
DB_PASSWORD="${DB_PASSWORD:-password}"
TEST_USER_EMAIL="${TEST_USER_EMAIL:-user@example.com}"
POSTGRES_CONTAINER="${POSTGRES_CONTAINER:-veza_postgres}"

echo "🔧 [SETUP] Promoting test user to 'artist' role..."
echo "   User: $TEST_USER_EMAIL"
echo "   Database: $DB_NAME@$DB_HOST:$DB_PORT"

# Option 1: Utiliser psql directement
if command -v psql &> /dev/null; then
    echo "📝 [SETUP] Using psql..."
    PGPASSWORD="$DB_PASSWORD" psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" <<EOF
-- Ajouter le rôle artist s'il n'existe pas
-- NOTE: display_name est NOT NULL, il faut le fournir
INSERT INTO roles (name, display_name, description) 
VALUES ('artist', 'Artist', 'Artist role for content creation')
ON CONFLICT (name) DO NOTHING;

-- Ajouter le rôle à l'utilisateur
-- Ajouter le rôle à l'utilisateur
-- NOTE: La colonne 'role' est aussi requise dans user_roles (pour compatibilité)
INSERT INTO user_roles (user_id, role_id, role)
SELECT 
    u.id,
    r.id,
    'artist'
FROM users u
CROSS JOIN roles r
WHERE u.email = '$TEST_USER_EMAIL'
  AND r.name = 'artist'
ON CONFLICT (user_id, role) DO NOTHING;

-- Vérifier l'email de l'utilisateur (nécessaire pour certains endpoints)
UPDATE users 
SET is_verified = true 
WHERE email = '$TEST_USER_EMAIL';

-- Vérification
SELECT 
    u.email,
    r.name as role_name,
    u.is_verified
FROM users u
LEFT JOIN user_roles ur ON u.id = ur.user_id
LEFT JOIN roles r ON ur.role_id = r.id
WHERE u.email = '$TEST_USER_EMAIL';
EOF
    echo "✅ [SETUP] Test user role updated successfully!"
    
# Option 2: Utiliser Docker exec si la DB est dans Docker
elif command -v docker &> /dev/null; then
    echo "🐳 [SETUP] Using Docker exec..."
    
    # Chercher le conteneur PostgreSQL
    if docker ps --format "{{.Names}}" | grep -q "^${POSTGRES_CONTAINER}$"; then
        CONTAINER_NAME="$POSTGRES_CONTAINER"
    elif docker ps --format "{{.Names}}" | grep -qi postgres; then
        CONTAINER_NAME=$(docker ps --format "{{.Names}}" | grep -i postgres | head -n 1)
    else
        echo "❌ [SETUP] No PostgreSQL container found"
        echo "   Tried: $POSTGRES_CONTAINER"
        echo "   Available containers:"
        docker ps --format "{{.Names}}" || echo "   (none running)"
        exit 1
    fi
    
    echo "   Using container: $CONTAINER_NAME"
    
    docker exec -i "$CONTAINER_NAME" psql -U "$DB_USER" -d "$DB_NAME" <<EOF
-- Ajouter le rôle artist s'il n'existe pas
-- NOTE: display_name est NOT NULL, il faut le fournir
INSERT INTO roles (name, display_name, description) 
VALUES ('artist', 'Artist', 'Artist role for content creation')
ON CONFLICT (name) DO NOTHING;

-- Ajouter le rôle à l'utilisateur
-- NOTE: La colonne 'role' est aussi requise dans user_roles (pour compatibilité)
INSERT INTO user_roles (user_id, role_id, role)
SELECT 
    u.id,
    r.id,
    'artist'
FROM users u
CROSS JOIN roles r
WHERE u.email = '$TEST_USER_EMAIL'
  AND r.name = 'artist'
ON CONFLICT (user_id, role) DO NOTHING;

-- Vérifier l'email de l'utilisateur (nécessaire pour certains endpoints)
UPDATE users 
SET is_verified = true 
WHERE email = '$TEST_USER_EMAIL';

-- Vérification
SELECT u.email, r.name as role_name, u.is_verified
FROM users u
LEFT JOIN user_roles ur ON u.id = ur.user_id
LEFT JOIN roles r ON ur.role_id = r.id
WHERE u.email = '$TEST_USER_EMAIL';
EOF
    echo "✅ [SETUP] Test user role updated successfully!"
else
    echo "❌ [SETUP] Neither psql nor Docker found. Please run the SQL manually:"
    echo ""
    cat "$(dirname "$0")/setup-test-user-role.sql"
    exit 1
fi
