#!/usr/bin/env bash
set -euo pipefail

# Этот сценарий проверяет файл среды на наличие значений заполнителей и заменяет их сгенерированными ключами или системными переменными.

APP_DIR="$(readlink -f "$(dirname "${BASH_SOURCE[0]}")/..")"
APP_DATA_DIR="$APP_DIR/data"
DESIRED_OWNER="1000:1000"
ENV_FILE="$APP_DIR/settings.env"

# Проверьте, существует ли файл
if [ ! -f "$ENV_FILE" ]; then
    echo "Error: Environment file not found at $ENV_FILE"
    exit 1
fi

# Проверьте, установлено ли значение FERNET_KEY на "changeme".
if grep -Eq '^FERNET_KEY= *changeme$' "$ENV_FILE"; then
    echo "Placeholder value for FERNET_KEY detected. Generating a new key..."

    # Создать новый ключ FERNET
    FERNET_KEY=$(python3 -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())")

    # Замените заполнитель новым ключом
    sed -i -E 's|^FERNET_KEY= *changeme$|FERNET_KEY="'"$FERNET_KEY"'"|' "$ENV_FILE"

    echo "Updated FERNET_KEY in $ENV_FILE"
else
    echo "FERNET_KEY is already set. No changes made."
fi

# Проверьте, установлено ли значение ENDURAIN_HOST на "changeme".
if grep -Eq '^ENDURAIN_HOST= *changeme$' "$ENV_FILE"; then
    echo "Placeholder value for ENDURAIN_HOST detected. Adding proper hostname..."

    # Замените заполнитель именем хоста
    sed -i -E 's|^ENDURAIN_HOST= *changeme$|ENDURAIN_HOST="'"http://${DEVICE_DOMAIN_NAME}:8865"'"|' "$ENV_FILE"

    echo "Updated ENDURAIN_HOST in $ENV_FILE"
else
    echo "ENDURAIN_HOST is already set. No changes made."
fi

set_correct_permissions() {
	local -r path="${1}"

	# Проверьте, существует ли путь (файл или каталог)
	if [[ -e "${path}" ]]; then
		owner=$(stat -c "%u:%g" "${path}")

		if [[ "${owner}" != "${DESIRED_OWNER}" ]]; then
			chown "${DESIRED_OWNER}" "${path}"
			echo "Changed ownership of ${path} to ${DESIRED_OWNER}"
		fi
	else
		echo "Skipping ${path} - path does not exist"
	fi
}

# Обработка реструктуризации каталогов для версии 0.13.0.
restructure_directories() {
	local -r app_dir="${APP_DATA_DIR}/app"
	
	# Проверьте, нужно ли нам делать реструктуризацию
	if [[ -d "${app_dir}/files" && ! -d "${app_dir}/activity_files" ]]; then
		echo "Restructuring directories for Endurain v0.13.0..."
		
		# Переименуйте каталог файлов в Activity_files
		if mv "${app_dir}/files" "${app_dir}/activity_files" 2>/dev/null; then
			echo "Renamed ${app_dir}/files to ${app_dir}/activity_files"
		else
			echo "Failed to rename ${app_dir}/files to ${app_dir}/activity_files"
		fi
	fi
	
	# Создайте новые каталоги, если они не существуют.
	mkdir -p "${app_dir}/activity_media"
	echo "Created ${app_dir}/activity_media directory"
	
	mkdir -p "${app_dir}/server_images"
	echo "Created ${app_dir}/server_images directory"
	
	# Переместить каталог журналов из app/logs в журналы (на корневом уровне).
	if [[ -d "${app_dir}/logs" && ! -d "${APP_DATA_DIR}/logs" ]]; then
		if mv "${app_dir}/logs" "${APP_DATA_DIR}/logs" 2>/dev/null; then
			echo "Moved ${app_dir}/logs to ${APP_DATA_DIR}/logs"
		else
			echo "Failed to move ${app_dir}/logs to ${APP_DATA_DIR}/logs"
		fi
	elif [[ ! -d "${APP_DATA_DIR}/logs" ]]; then
		# Создайте каталог журналов, если он не существует.
		mkdir -p "${APP_DATA_DIR}/logs"
		echo "Created ${APP_DATA_DIR}/logs directory"
	fi
}

# Выполнить реструктуризацию каталога
if [[ -d "${APP_DATA_DIR}/app" ]]; then
	restructure_directories
fi

# Рекурсивно устанавливайте разрешения для всего каталога /app и его подкаталогов.
if [[ -d "${APP_DATA_DIR}/app" ]]; then
	chown -R "${DESIRED_OWNER}" "${APP_DATA_DIR}/app"
	echo "Set recursive ownership of ${APP_DATA_DIR}/app to ${DESIRED_OWNER}"
fi

# Рекурсивно устанавливайте разрешения для всего каталога /logs и его подкаталогов.
if [[ -d "${APP_DATA_DIR}/logs" ]]; then
	chown -R "${DESIRED_OWNER}" "${APP_DATA_DIR}/logs"
	echo "Set recursive ownership of ${APP_DATA_DIR}/logs to ${DESIRED_OWNER}"
fi

exit 0
