#!/bin/bash

if [ $# -ne 1 ]; then
    echo "Ошибка: укажите полный путь к файлу docker-compose.yaml"
    echo "Пример: $0 /r7team/media/docker-compose.yaml"
    exit 1
fi

COMPOSE_FILE="$1"

if [ ! -f "$COMPOSE_FILE" ]; then
    echo "Ошибка: файл $COMPOSE_FILE не найден по указанному пути"
    exit 1
fi

SUFFIX=$(basename "$(dirname "$COMPOSE_FILE")")

ARCHIVE_NAME="/tmp/${SUFFIX}-docker-logs-$(date +%Y%m%d-%H%M%S).tar.gz"

TEMP_DIR=$(mktemp -d)

CONTAINER_IDS=$(docker-compose -f "$COMPOSE_FILE" ps -q)

if [ -z "$CONTAINER_IDS" ]; then
    echo "Ошибка: не удалось извлечь ID контейнеров из $COMPOSE_FILE"
    rm -rf "$TEMP_DIR"
    exit 1
fi

FOUND_LOGS=false

while IFS= read -r CONTAINER_ID; do
    # Получаем имя сервиса из docker inspect
    SERVICE_NAME=$(docker inspect "$CONTAINER_ID" --format '{{index .Config.Labels "com.docker.compose.service"}}')
    
    # Проверяем, удалось ли получить имя сервиса
    if [ -z "$SERVICE_NAME" ]; then
        echo "Не удалось определить имя сервиса для контейнера $CONTAINER_ID, пропускаем..."
        continue
    fi

    # Увеличиваем счетчик для данного сервиса
    SERVICE_COUNTS["$SERVICE_NAME"]=$((SERVICE_COUNTS["$SERVICE_NAME"] + 1))
    REPLICA_NUMBER=${SERVICE_COUNTS["$SERVICE_NAME"]}

    # Формируем имя файла логов
    if [ "$REPLICA_NUMBER" -eq 1 ]; then
        LOG_FILE="$TEMP_DIR/$SERVICE_NAME.log"
    else
        LOG_FILE="$TEMP_DIR/$SERVICE_NAME-$REPLICA_NUMBER.log"
    fi

    # Получаем имя контейнера для вывода в сообщении
    CONTAINER_NAME=$(docker inspect "$CONTAINER_ID" --format '{{.Name}}' | sed 's|^/||')

    echo "Сбор логов для контейнера $CONTAINER_NAME ($CONTAINER_ID, сервис $SERVICE_NAME)..."
    # Сохраняем логи в файл
    docker logs "$CONTAINER_ID" > "$LOG_FILE" 2>&1
    FOUND_LOGS=true
done <<< "$CONTAINER_IDS"

if [ "$FOUND_LOGS" = false ]; then
    echo "Ни один из указанных контейнеров не найден"
    rm -rf "$TEMP_DIR"
    exit 1
fi

echo "Создание архива $ARCHIVE_NAME..."


if ! tar -zcf "$ARCHIVE_NAME" -C "$TEMP_DIR" .; then
    echo "Ошибка при создании архива"
    rm -rf "$TEMP_DIR"
    exit 1
fi

rm -rf "$TEMP_DIR"

echo "Все логи собраны и сохранены в $ARCHIVE_NAME"