#!/bin/bash

# Fix Keycloak user setup
echo "Setting up Keycloak user via Admin Console..."

# Get admin token
ADMIN_TOKEN=$(curl -s -X POST "http://localhost:8080/realms/master/protocol/openid-connect/token" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "username=admin" \
  -d "password=admin" \
  -d "grant_type=password" \
  -d "client_id=admin-cli" | jq -r '.access_token')

if [ -z "$ADMIN_TOKEN" ] || [ "$ADMIN_TOKEN" = "null" ]; then
  echo "Failed to get admin token"
  exit 1
fi

echo "Got admin token"

# Get user ID
USER_ID=$(curl -s -X GET "http://localhost:8080/admin/realms/b2b-flight-platform/users?username=superadmin" \
  -H "Authorization: Bearer $ADMIN_TOKEN" | jq -r '.[0].id')

if [ -z "$USER_ID" ] || [ "$USER_ID" = "null" ]; then
  echo "User not found, creating new user..."
  
  # Create user
  curl -s -X POST "http://localhost:8080/admin/realms/b2b-flight-platform/users" \
    -H "Authorization: Bearer $ADMIN_TOKEN" \
    -H "Content-Type: application/json" \
    -d '{
      "username": "superadmin",
      "email": "superadmin@b2bflight.com",
      "enabled": true,
      "emailVerified": true,
      "credentials": [{
        "type": "password",
        "value": "SuperAdmin123!",
        "temporary": false
      }]
    }'
  
  # Get the newly created user ID
  sleep 2
  USER_ID=$(curl -s -X GET "http://localhost:8080/admin/realms/b2b-flight-platform/users?username=superadmin" \
    -H "Authorization: Bearer $ADMIN_TOKEN" | jq -r '.[0].id')
else
  echo "User found with ID: $USER_ID"
  
  # Reset password
  curl -s -X PUT "http://localhost:8080/admin/realms/b2b-flight-platform/users/$USER_ID/reset-password" \
    -H "Authorization: Bearer $ADMIN_TOKEN" \
    -H "Content-Type: application/json" \
    -d '{
      "type": "password",
      "value": "SuperAdmin123!",
      "temporary": false
    }'
  
  echo "Password reset successfully"
fi

# Assign SUPER_ADMIN role
echo "Assigning SUPER_ADMIN role..."

# Get role ID
ROLE_ID=$(curl -s -X GET "http://localhost:8080/admin/realms/b2b-flight-platform/roles/SUPER_ADMIN" \
  -H "Authorization: Bearer $ADMIN_TOKEN" | jq -r '.id')

if [ -z "$ROLE_ID" ] || [ "$ROLE_ID" = "null" ]; then
  echo "SUPER_ADMIN role not found, creating it..."
  curl -s -X POST "http://localhost:8080/admin/realms/b2b-flight-platform/roles" \
    -H "Authorization: Bearer $ADMIN_TOKEN" \
    -H "Content-Type: application/json" \
    -d '{
      "name": "SUPER_ADMIN",
      "description": "Super Administrator role"
    }'
  
  sleep 1
  ROLE_ID=$(curl -s -X GET "http://localhost:8080/admin/realms/b2b-flight-platform/roles/SUPER_ADMIN" \
    -H "Authorization: Bearer $ADMIN_TOKEN" | jq -r '.id')
fi

echo "Role ID: $ROLE_ID"

# Assign role to user
curl -s -X POST "http://localhost:8080/admin/realms/b2b-flight-platform/users/$USER_ID/role-mappings/realm" \
  -H "Authorization: Bearer $ADMIN_TOKEN" \
  -H "Content-Type: application/json" \
  -d "[{
    \"id\": \"$ROLE_ID\",
    \"name\": \"SUPER_ADMIN\"
  }]"

echo ""
echo "✅ User setup complete!"
echo "Username: superadmin"
echo "Password: SuperAdmin123!"
echo ""
echo "Testing login..."

# Test login
LOGIN_RESPONSE=$(curl -s -X POST "http://localhost:8080/realms/b2b-flight-platform/protocol/openid-connect/token" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "username=superadmin" \
  -d "password=SuperAdmin123!" \
  -d "grant_type=password" \
  -d "client_id=b2b-flight-frontend")

if echo "$LOGIN_RESPONSE" | jq -e '.access_token' > /dev/null 2>&1; then
  echo "✅ Login test successful!"
  echo ""
  echo "Now testing backend API..."
  
  # Test backend API
  API_RESPONSE=$(curl -s -X POST "http://localhost:8081/api/v1/auth/login" \
    -H "Content-Type: application/json" \
    -d '{"username":"superadmin","password":"SuperAdmin123!"}')
  
  if echo "$API_RESPONSE" | jq -e '.access_token' > /dev/null 2>&1; then
    echo "✅ Backend API login successful!"
  else
    echo "❌ Backend API login failed:"
    echo "$API_RESPONSE" | jq '.'
  fi
else
  echo "❌ Login test failed:"
  echo "$LOGIN_RESPONSE" | jq '.'
fi
