#!/bin/bash

# Скрипт для запуска микросервисной архитектуры Women Safety App
# Запускает все необходимые микросервисы и API Gateway

# Цвета для вывода
GREEN="\033[0;32m"
YELLOW="\033[0;33m"
BLUE="\033[0;34m"
RED="\033[0;31m"
NC="\033[0m" # No Color

# Переход в директорию проекта
cd "$(dirname "$0")" || { echo -e "${RED}Не удалось перейти в директорию проекта${NC}"; exit 1; }

# Активация виртуального окружения
echo -e "${YELLOW}Активация виртуального окружения...${NC}"
source venv/bin/activate

# Установка переменной PYTHONPATH
export PYTHONPATH="${PWD}:${PYTHONPATH}"

# Используем Python из виртуального окружения
PYTHON_BIN="${PWD}/venv/bin/python"

# Функция для проверки доступности порта
check_port() {
    local port=$1
    if lsof -Pi :$port -sTCP:LISTEN -t >/dev/null ; then
        return 0 # порт занят
    else
        return 1 # порт свободен
    fi
}

# Создание скрипта миграции
echo -e "${YELLOW}Создание скрипта миграции базы данных...${NC}"
cat > migrate_db.py << 'EOF'
import asyncio

async def run_migrations():
    from shared.database import init_db
    print("✅ Миграции базы данных запущены")
    await init_db()
    print("✅ Миграции базы данных завершены")

if __name__ == "__main__":
    asyncio.run(run_migrations())
EOF

# Запуск миграции
echo -e "${YELLOW}Запуск миграций базы данных...${NC}"
$PYTHON_BIN migrate_db.py

# Запуск микросервисов в фоновом режиме
echo -e "${YELLOW}Запуск микросервисов...${NC}"

# Список сервисов для запуска
services=(
    "user_service:8001"
    "emergency_service:8002"
    "location_service:8003"
    "calendar_service:8004"
    "notification_service:8005"
)

# Запуск сервисов в фоновом режиме
for service in "${services[@]}"; do
    name=${service%%:*}
    port=${service#*:}
    
    if check_port $port; then
        echo -e "${YELLOW}Порт $port уже используется, пропускаем запуск $name${NC}"
        continue
    fi
    
    echo -e "${BLUE}Запуск $name на порту $port...${NC}"
    $PYTHON_BIN -m uvicorn services.${name}.main:app --host 0.0.0.0 --port $port &
    
    # Сохраняем PID процесса
    echo $! > /tmp/${name}.pid
    
    # Ждем немного, чтобы сервис успел запуститься
    sleep 2
done

# Проверка, что все сервисы запущены
echo -e "${YELLOW}Проверка статуса сервисов...${NC}"
for service in "${services[@]}"; do
    name=${service%%:*}
    port=${service#*:}
    
    if check_port $port; then
        echo -e "${GREEN}✅ Сервис $name запущен на порту $port${NC}"
    else
        echo -e "${RED}❌ Сервис $name НЕ запущен на порту $port${NC}"
    fi
done

# Получение IP-адреса для доступа из мобильного приложения
EXTERNAL_IP=$(hostname -I | awk '{print $1}')
echo -e "${GREEN}📱 IP-адрес для доступа из мобильного приложения: ${EXTERNAL_IP}:8000${NC}"

# Запуск API Gateway
echo -e "${GREEN}Запуск API Gateway на порту 8000...${NC}"
$PYTHON_BIN -m uvicorn services.api_gateway.main:app --host 0.0.0.0 --port 8000