#!/bin/bash

set -e 

CURRENT_DIR=$(pwd)
HOST_PORT="5002"
APP_VERSION="latest"

DOTNET_CONTAINER_UID=1000

TEMPLATE_FILE="docker-compose.template.yml"
OUTPUT_FILE="docker-compose.yml"

check_sudo() {
    if [ "$(id -u)" -ne 0 ]; then
        echo "Этот скрипт необходимо запускать от суперпользователя!" 1>&2
        exit 1
    fi
}

show_help() {
    echo "Использование: $0 [опции]"
    echo ""
    echo "Опции:"
    echo "  -p, --port     Порт на хосте (дефолт: 5002)"
    echo "  -v, --version  Версия приложения (дефолт: latest)"
    echo "  -h, --help     Показать эту справку"
    echo ""
    echo "Текущие авто-настройки системы:"
    echo "  Директория:    $CURRENT_DIR"
    exit 0
}

generate_compose() {
    if [[ ! -f "$TEMPLATE_FILE" ]]; then
        echo "Ошибка: Файл шаблона '$TEMPLATE_FILE' не найден!" >&2
        exit 1
    fi

    echo "Генерация $OUTPUT_FILE..."
    echo "-> Порт:        $HOST_PORT"
    echo "-> Версия:      $APP_VERSION"

    sed "s|{{HOST_PORT}}|$HOST_PORT|g; \
         s|{{APP_VERSION}}|$APP_VERSION|g" "$TEMPLATE_FILE" > "$OUTPUT_FILE"

    echo "Успешно! Файл $OUTPUT_FILE готов к запуску."
}

create_data_dirs() {
    mkdir -p ./data/fias/region/{Download,TossedFiles}
    mkdir -p ./data/fias/county/{Download,TossedFiles}
    mkdir -p ./logs/
}

change_owner() {
    echo "Настройка прав для пользователя контейнера (UID $DOTNET_CONTAINER_UID)..."
    
    if [ -f "./appsettings.Production.json" ]; then
        chown "$DOTNET_CONTAINER_UID:$DOTNET_CONTAINER_UID" ./appsettings.Production.json
        chmod 644 ./appsettings.Production.json
    else
        echo "Предупреждение: ./appsettings.Production.json не найден для смены прав!"
    fi

    chown -R "$DOTNET_CONTAINER_UID:$DOTNET_CONTAINER_UID" ./data/
    chmod -R 755 ./data/

    chown -R "$DOTNET_CONTAINER_UID:$DOTNET_CONTAINER_UID" ./logs/
    chmod -R 755 ./logs/
}

while [[ "$#" -gt 0 ]]
    do
        case $1 in
            -p|--port)
                HOST_PORT="$2"
                ;;
            
            -v|--version)
                APP_VERSION="$2"
                ;;
            -h|--help)
                SHOW_HELP="1"
                ;;
        esac
    shift
done

# Выводим справку о скрипте
if [ ! -z ${SHOW_HELP} ]; then
    show_help
fi

# Проверяем запуск от суперпользователя
check_sudo

echo "=== 1. Остановка старого контейнера (если он запущен) ==="
docker compose down || true

echo "=== 2. Генерация нового compose файла ==="
generate_compose

echo "=== 3. Создание структуры папок для данных ==="
create_data_dirs

echo "=== 4. Корректировка прав ==="
change_owner

echo "=== 5. Загрузка docker-образа из архива ==="
if [ -f "fiasks.tar" ]; then
    docker load -i fiasks.tar
else
    echo "Ошибка: Файл fiasks.tar не найден в текущей директории!" >&2
    exit 1
fi

echo "=== 6. Запуск приложения Docker Compose ==="
docker compose up -d

echo "=== 7. Проверка статуса запущенных контейнеров ==="
docker compose ps

echo "=== Приложение развернуто ==="