#!/usr/bin/env python
import json
import requests
import sys
from datetime import date

# API Gateway endpoint
BASE_URL = "http://localhost:8004"

# Имя пользователя и пароль для аутентификации
# (предполагается, что у вас есть настроенный доступ)
AUTH_DATA = {
    "username": "test_user",
    "password": "test_password"
}

# Получение токена аутентификации
def get_token():
    # Обычно мы бы получили токен из сервиса аутентификации,
    # но для теста будем использовать фиктивный токен
    # или можем запросить его из user_service
    return "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6InRlc3RfdXNlciIsImVtYWlsIjoidGVzdEBleGFtcGxlLmNvbSIsImV4cCI6MTY5ODI0OTc2Mn0.HS5-cPVZwv55h0CZO0q_Z_1vNY9w8B6YsPJytj4UI0A"

# Проверка работоспособности сервиса
def check_health():
    try:
        response = requests.get(f"{BASE_URL}/health")
        if response.status_code == 200:
            print(f"Сервис календаря работает. Ответ: {response.json()}")
            return True
        else:
            print(f"Сервис календаря доступен, но возвращает ошибку: {response.status_code}")
            return False
    except requests.exceptions.ConnectionError:
        print(f"Ошибка подключения к {BASE_URL}. Убедитесь, что сервис запущен.")
        return False

# Тестовые данные для мобильного приложения
def test_create_calendar_entry_mobile():
    try:
        token = get_token()
        print(f"Токен получен: {token[:15]}...")
        
        # Данные в формате мобильного приложения
        mobile_data = {
            "date": date.today().isoformat(),
            "type": "MENSTRUATION",
            "flow_intensity": 3,  # средний (1-5)
            "symptoms": ["CRAMPS", "HEADACHE"],  # массив строк
            "mood": "NORMAL",
            "notes": "Тестовая запись из мобильного приложения"
        }
        
        print(f"Отправляемые данные: {json.dumps(mobile_data, indent=2)}")
        
        headers = {
            "Content-Type": "application/json",
            "Authorization": f"Bearer {token}"
        }
        
        print(f"Отправляем запрос на {BASE_URL}/debug/mobile-entry")
        
        # Используем тестовый эндпоинт без аутентификации
        print(f"Отправляем запрос на {BASE_URL}/debug/mobile-entry")
        response = requests.post(
            f"{BASE_URL}/debug/mobile-entry", 
            json=mobile_data
        )
        
        print(f"Статус ответа: {response.status_code}")
        
        if response.status_code >= 200 and response.status_code < 300:
            print(f"Тело успешного ответа: {json.dumps(response.json(), indent=2)}")
            return response.json()
        else:
            print("Ошибка при создании записи")
            try:
                print(f"Тело ответа с ошибкой: {json.dumps(response.json(), indent=2)}")
            except json.JSONDecodeError:
                print(f"Тело ответа не является JSON: {response.text}")
            return None
            
    except requests.exceptions.RequestException as e:
        print(f"Ошибка при выполнении запроса: {e}")
        return None
    except Exception as e:
        print(f"Неожиданная ошибка: {e}")
        return None

if __name__ == "__main__":
    print("Тестирование создания записи календаря из мобильного приложения...")
    
    if not check_health():
        print("Сервис недоступен. Тестирование прекращено.")
        sys.exit(1)
        
    result = test_create_calendar_entry_mobile()
    
    if result:
        print("Тест успешно завершен!")
    else:
        print("Тест завершился с ошибкой.")
        sys.exit(1)