#!/bin/bash

# Скрипт для тестирования API сервиса питания через cURL

# Настройки
API_BASE_URL="http://localhost:8006/api/v1/nutrition"
AUTH_URL="http://localhost:8001/api/v1/auth"
TODAY=$(date +"%Y-%m-%d")
TEST_USERNAME="test_nutrition_user"
TEST_PASSWORD="Test123!"

# Цветной вывод
GREEN='\033[0;32m'
RED='\033[0;31m'
BLUE='\033[0;34m'
YELLOW='\033[0;33m'
NC='\033[0m' # No Color

echo -e "${BLUE}🚀 Запуск тестов для Nutrition Service API${NC}"
echo "---------------------------------------------"

# Шаг 1: Авторизация и получение токена
echo -e "${BLUE}📝 Шаг 1: Получение токена авторизации${NC}"

# Попытка входа
login_response=$(curl -s -X POST "${AUTH_URL}/login" \
  -H "Content-Type: application/json" \
  -d '{
    "username": "'"${TEST_USERNAME}"'",
    "password": "'"${TEST_PASSWORD}"'"
  }')

# Проверяем, успешен ли вход
if [[ $login_response == *"access_token"* ]]; then
  TOKEN=$(echo $login_response | grep -o '"access_token":"[^"]*' | sed 's/"access_token":"//')
  echo -e "${GREEN}✅ Вход успешен!${NC}"
else
  echo -e "${YELLOW}⚠️ Вход не удался, пробуем регистрацию...${NC}"
  
  # Пробуем зарегистрировать пользователя
  curl -s -X POST "${AUTH_URL}/register" \
    -H "Content-Type: application/json" \
    -d '{
      "email": "'"${TEST_USERNAME}@example.com"'",
      "username": "'"${TEST_USERNAME}"'",
      "password": "'"${TEST_PASSWORD}"'",
      "first_name": "Test",
      "last_name": "Nutrition",
      "phone": "+79991234999"
    }' > /dev/null
  
  # После регистрации пробуем войти снова
  login_response=$(curl -s -X POST "${AUTH_URL}/login" \
    -H "Content-Type: application/json" \
    -d '{
      "username": "'"${TEST_USERNAME}"'",
      "password": "'"${TEST_PASSWORD}"'"
    }')
  
  if [[ $login_response == *"access_token"* ]]; then
    TOKEN=$(echo $login_response | grep -o '"access_token":"[^"]*' | sed 's/"access_token":"//')
    echo -e "${GREEN}✅ Регистрация и вход успешны!${NC}"
  else
    echo -e "${RED}❌ Не удалось получить токен авторизации${NC}"
    echo "Ответ сервера: $login_response"
    exit 1
  fi
fi

# Шаг 2: Поиск продуктов
echo -e "\n${BLUE}📝 Шаг 2: Поиск продуктов${NC}"
search_response=$(curl -s -X POST "${API_BASE_URL}/search" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ${TOKEN}" \
  -d '{
    "query": "apple",
    "max_results": 5
  }')

echo "Результат поиска:"
echo "$search_response" | grep -o '"name":"[^"]*' | head -3 | sed 's/"name":"/- /'
echo "..."

# Получаем ID первого продукта из результатов поиска
FOOD_ID=$(echo $search_response | grep -o '"id":[0-9]*' | head -1 | sed 's/"id"://')
if [[ -z "$FOOD_ID" ]]; then
  echo -e "${YELLOW}⚠️ Не удалось получить ID продукта, используем значение по умолчанию${NC}"
  FOOD_ID=1
else
  echo -e "${GREEN}✅ Получен ID продукта: ${FOOD_ID}${NC}"
fi

# Шаг 3: Добавление записи в дневник питания
echo -e "\n${BLUE}📝 Шаг 3: Добавление записи в дневник питания${NC}"
diary_response=$(curl -s -X POST "${API_BASE_URL}/diary" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ${TOKEN}" \
  -d '{
    "food_item_id": '"${FOOD_ID}"',
    "entry_date": "'"${TODAY}"'",
    "meal_type": "breakfast",
    "quantity": 1.5,
    "unit": "piece",
    "notes": "Тестовая запись"
  }')

if [[ $diary_response == *"id"* ]]; then
  echo -e "${GREEN}✅ Запись добавлена в дневник питания${NC}"
  echo "Детали записи:"
  echo "$diary_response" | grep -o '"calories":[0-9.]*' | sed 's/"calories":/Калории: /'
else
  echo -e "${RED}❌ Ошибка при добавлении записи в дневник${NC}"
  echo "Ответ сервера: $diary_response"
fi

# Шаг 4: Получение записей дневника
echo -e "\n${BLUE}📝 Шаг 4: Получение записей дневника${NC}"
get_diary_response=$(curl -s -X GET "${API_BASE_URL}/diary?date=${TODAY}" \
  -H "Authorization: Bearer ${TOKEN}")

if [[ $get_diary_response == *"meal_type"* ]]; then
  echo -e "${GREEN}✅ Записи дневника успешно получены${NC}"
  echo "Количество записей: $(echo $get_diary_response | grep -o '"meal_type"' | wc -l)"
else
  echo -e "${YELLOW}⚠️ Нет записей в дневнике или ошибка получения${NC}"
  echo "Ответ сервера: $get_diary_response"
fi

# Шаг 5: Добавление записи о потреблении воды
echo -e "\n${BLUE}📝 Шаг 5: Добавление записи о потреблении воды${NC}"
water_response=$(curl -s -X POST "${API_BASE_URL}/water" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ${TOKEN}" \
  -d '{
    "amount_ml": 250,
    "entry_date": "'"${TODAY}"'",
    "notes": "Утренний стакан воды"
  }')

if [[ $water_response == *"id"* ]]; then
  echo -e "${GREEN}✅ Запись о потреблении воды добавлена${NC}"
  echo "Детали записи:"
  echo "$water_response" | grep -o '"amount_ml":[0-9]*' | sed 's/"amount_ml":/Объем (мл): /'
else
  echo -e "${RED}❌ Ошибка при добавлении записи о воде${NC}"
  echo "Ответ сервера: $water_response"
fi

# Шаг 6: Добавление записи о физической активности
echo -e "\n${BLUE}📝 Шаг 6: Добавление записи о физической активности${NC}"
activity_response=$(curl -s -X POST "${API_BASE_URL}/activity" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ${TOKEN}" \
  -d '{
    "entry_date": "'"${TODAY}"'",
    "activity_type": "running",
    "duration_minutes": 30,
    "distance_km": 5.2,
    "intensity": "medium",
    "notes": "Утренняя пробежка"
  }')

if [[ $activity_response == *"id"* ]]; then
  echo -e "${GREEN}✅ Запись о физической активности добавлена${NC}"
  echo "Детали записи:"
  echo "$activity_response" | grep -o '"duration_minutes":[0-9]*' | sed 's/"duration_minutes":/Продолжительность (мин): /'
  echo "$activity_response" | grep -o '"calories_burned":[0-9.]*' | sed 's/"calories_burned":/Сожжено калорий: /'
else
  echo -e "${RED}❌ Ошибка при добавлении записи об активности${NC}"
  echo "Ответ сервера: $activity_response"
fi

# Шаг 7: Получение сводки за день
echo -e "\n${BLUE}📝 Шаг 7: Получение сводки за день${NC}"
summary_response=$(curl -s -X GET "${API_BASE_URL}/summary?date=${TODAY}" \
  -H "Authorization: Bearer ${TOKEN}")

if [[ $summary_response == *"total_calories"* ]]; then
  echo -e "${GREEN}✅ Дневная сводка успешно получена${NC}"
  echo "Детали сводки:"
  echo "$summary_response" | grep -o '"total_calories":[0-9.]*' | sed 's/"total_calories":/Всего калорий: /'
  echo "$summary_response" | grep -o '"water_consumed_ml":[0-9]*' | sed 's/"water_consumed_ml":/Потреблено воды (мл): /'
  echo "$summary_response" | grep -o '"activity_minutes":[0-9]*' | sed 's/"activity_minutes":/Минуты активности: /'
else
  echo -e "${YELLOW}⚠️ Нет данных для сводки или ошибка получения${NC}"
  echo "Ответ сервера: $summary_response"
fi

echo -e "\n${GREEN}✅ Тестирование API сервиса питания завершено!${NC}"