#!/bin/bash

# Скрипт для тестирования полного цикла аутентификации
# Регистрация -> Авторизация -> Получение Bearer токена

echo "🔐 Тестирование полного цикла аутентификации"
echo "============================================="

# Проверяем, что сервис запущен
echo "🔍 Проверяем доступность User Service..."
if ! curl -s http://localhost:8001/api/v1/health > /dev/null; then
    echo "❌ User Service недоступен. Запустите сервис командой:"
    echo "   cd services/user_service && python -m uvicorn main:app --host 0.0.0.0 --port 8001"
    exit 1
fi
echo "✅ User Service доступен"

# Генерируем уникальный email для тестирования
TIMESTAMP=$(date +%s)
EMAIL="test_user_${TIMESTAMP}@example.com"

echo -e "\n📝 Тестовые данные:"
echo "Email: $EMAIL"
echo "Password: TestPassword123"
echo "First Name: Тест"
echo "Last Name: Пользователь"
echo "Phone: +7-900-123-45-67"

# 1. РЕГИСТРАЦИЯ ПОЛЬЗОВАТЕЛЯ
echo -e "\n🔵 Шаг 1: Регистрация нового пользователя"
echo "============================================"

REGISTRATION_RESPONSE=$(curl -s -w "HTTPSTATUS:%{http_code}" -X POST "http://localhost:8001/api/v1/register" \
  -H "Content-Type: application/json" \
  -d "{
    \"email\": \"$EMAIL\",
    \"password\": \"TestPassword123\",
    \"first_name\": \"Тест\",
    \"last_name\": \"Пользователь\",
    \"phone\": \"+7-900-123-45-67\"
  }")

# Извлекаем HTTP статус и тело ответа
HTTP_STATUS=$(echo $REGISTRATION_RESPONSE | tr -d '\n' | sed -e 's/.*HTTPSTATUS://')
REGISTRATION_BODY=$(echo $REGISTRATION_RESPONSE | sed -e 's/HTTPSTATUS:.*//g')

if [ "$HTTP_STATUS" -eq 201 ] || [ "$HTTP_STATUS" -eq 200 ]; then
    echo "✅ Регистрация успешна!"
    echo "📋 Данные пользователя:"
    echo "$REGISTRATION_BODY" | jq . 2>/dev/null || echo "$REGISTRATION_BODY"
    
    # Извлекаем UUID пользователя
    USER_UUID=$(echo "$REGISTRATION_BODY" | jq -r '.uuid' 2>/dev/null)
    echo "🆔 UUID пользователя: $USER_UUID"
else
    echo "❌ Ошибка регистрации. HTTP Status: $HTTP_STATUS"
    echo "📋 Ответ сервера:"
    echo "$REGISTRATION_BODY" | jq . 2>/dev/null || echo "$REGISTRATION_BODY"
    exit 1
fi

# 2. АВТОРИЗАЦИЯ ПОЛЬЗОВАТЕЛЯ
echo -e "\n🔵 Шаг 2: Авторизация пользователя"
echo "=================================="

LOGIN_RESPONSE=$(curl -s -w "HTTPSTATUS:%{http_code}" -X POST "http://localhost:8001/api/v1/login" \
  -H "Content-Type: application/json" \
  -d "{
    \"email\": \"$EMAIL\",
    \"password\": \"TestPassword123\"
  }")

# Извлекаем HTTP статус и тело ответа
HTTP_STATUS=$(echo $LOGIN_RESPONSE | tr -d '\n' | sed -e 's/.*HTTPSTATUS://')
LOGIN_BODY=$(echo $LOGIN_RESPONSE | sed -e 's/HTTPSTATUS:.*//g')

if [ "$HTTP_STATUS" -eq 200 ]; then
    echo "✅ Авторизация успешна!"
    echo "📋 Данные авторизации:"
    echo "$LOGIN_BODY" | jq . 2>/dev/null || echo "$LOGIN_BODY"
    
    # Извлекаем Bearer токен
    BEARER_TOKEN=$(echo "$LOGIN_BODY" | jq -r '.access_token' 2>/dev/null)
    TOKEN_TYPE=$(echo "$LOGIN_BODY" | jq -r '.token_type' 2>/dev/null)
    
    if [ "$BEARER_TOKEN" != "null" ] && [ "$BEARER_TOKEN" != "" ]; then
        echo -e "\n🎯 Bearer Token получен успешно!"
        echo "=================================="
        echo "🔑 Token Type: $TOKEN_TYPE"
        echo "🔐 Access Token: $BEARER_TOKEN"
        echo ""
        echo "📋 Полный Authorization Header:"
        echo "Authorization: $TOKEN_TYPE $BEARER_TOKEN"
        echo ""
        echo "📋 Для использования в curl:"
        echo "curl -H \"Authorization: $TOKEN_TYPE $BEARER_TOKEN\" http://localhost:8001/api/v1/protected-endpoint"
    else
        echo "❌ Не удалось извлечь Bearer токен из ответа"
        exit 1
    fi
else
    echo "❌ Ошибка авторизации. HTTP Status: $HTTP_STATUS"
    echo "📋 Ответ сервера:"
    echo "$LOGIN_BODY" | jq . 2>/dev/null || echo "$LOGIN_BODY"
    exit 1
fi

# 3. ТЕСТИРОВАНИЕ ТОКЕНА (если есть защищенный эндпоинт)
echo -e "\n🔵 Шаг 3: Проверка профиля пользователя с токеном"
echo "==============================================="

PROFILE_RESPONSE=$(curl -s -w "HTTPSTATUS:%{http_code}" -X GET "http://localhost:8001/api/v1/profile" \
  -H "Authorization: $TOKEN_TYPE $BEARER_TOKEN")

# Извлекаем HTTP статус и тело ответа
HTTP_STATUS=$(echo $PROFILE_RESPONSE | tr -d '\n' | sed -e 's/.*HTTPSTATUS://')
PROFILE_BODY=$(echo $PROFILE_RESPONSE | sed -e 's/HTTPSTATUS:.*//g')

if [ "$HTTP_STATUS" -eq 200 ]; then
    echo "✅ Токен работает! Профиль получен:"
    echo "$PROFILE_BODY" | jq . 2>/dev/null || echo "$PROFILE_BODY"
else
    echo "⚠️  Не удалось получить профиль. HTTP Status: $HTTP_STATUS"
    echo "📋 Ответ сервера:"
    echo "$PROFILE_BODY" | jq . 2>/dev/null || echo "$PROFILE_BODY"
    echo "💡 Возможно, эндпоинт /profile не реализован или требует другой путь"
fi

echo -e "\n🎉 Тестирование завершено!"
echo "=========================="
echo "✅ Регистрация: Успешно"
echo "✅ Авторизация: Успешно" 
echo "✅ Bearer Token: Получен"
echo ""
echo "🔐 Ваш Bearer Token:"
echo "$TOKEN_TYPE $BEARER_TOKEN"
echo ""
echo "💾 Токен сохранен в переменную окружения для использования:"
echo "export AUTH_TOKEN=\"$TOKEN_TYPE $BEARER_TOKEN\""
echo ""
echo "📖 Для тестирования других эндпоинтов используйте:"
echo "curl -H \"Authorization: \$AUTH_TOKEN\" http://localhost:8001/api/v1/your-endpoint"