#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "$0")" && pwd)"
# shellcheck disable=SC1091
source "${ROOT_DIR}/lib.sh"
load_env_file "${BOOTSTRAP_ENV_FILE:?}"

require_cmd openssl

log "Prepare bootstrap runtime env without printing secret values"

KODEX_INTERNAL_REGISTRY_PORT="${KODEX_INTERNAL_REGISTRY_PORT:-5000}"
KODEX_INTERNAL_REGISTRY_HOST="${KODEX_INTERNAL_REGISTRY_HOST:-127.0.0.1:${KODEX_INTERNAL_REGISTRY_PORT}}"
KODEX_POSTGRES_DB="${KODEX_POSTGRES_DB:-kodex}"
KODEX_POSTGRES_USER="${KODEX_POSTGRES_USER:-kodex}"
KODEX_POSTGRES_PASSWORD="${KODEX_POSTGRES_PASSWORD:-}"
KODEX_PROJECT_DB_ADMIN_HOST="${KODEX_PROJECT_DB_ADMIN_HOST:-postgres}"
KODEX_PROJECT_DB_ADMIN_PORT="${KODEX_PROJECT_DB_ADMIN_PORT:-5432}"
KODEX_PROJECT_DB_ADMIN_SSLMODE="${KODEX_PROJECT_DB_ADMIN_SSLMODE:-disable}"
KODEX_PROJECT_DB_ADMIN_DATABASE="${KODEX_PROJECT_DB_ADMIN_DATABASE:-postgres}"

set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_INTERNAL_REGISTRY_HOST "$KODEX_INTERNAL_REGISTRY_HOST"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_POSTGRES_DB "$KODEX_POSTGRES_DB"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_POSTGRES_USER "$KODEX_POSTGRES_USER"
if [ -z "$KODEX_POSTGRES_PASSWORD" ]; then
  set_env_var "$BOOTSTRAP_ENV_FILE" KODEX_POSTGRES_PASSWORD "$(random_hex 32)"
fi

set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_GITHUB_WEBHOOK_SECRET "$(random_hex 32)"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_ACCESS_MANAGER_GRPC_AUTH_TOKEN "$(random_hex 32)"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_PROJECT_CATALOG_GRPC_AUTH_TOKEN "$(random_hex 32)"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_PACKAGE_HUB_GRPC_AUTH_TOKEN "$(random_hex 32)"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_PROVIDER_HUB_GRPC_AUTH_TOKEN "$(random_hex 32)"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_GOVERNANCE_MANAGER_GRPC_AUTH_TOKEN "$(random_hex 32)"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_INTERACTION_HUB_GRPC_AUTH_TOKEN "$(random_hex 32)"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_FLEET_MANAGER_GRPC_AUTH_TOKEN "$(random_hex 32)"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_RUNTIME_MANAGER_GRPC_AUTH_TOKEN "$(random_hex 32)"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_AGENT_MANAGER_GRPC_AUTH_TOKEN "$(random_hex 32)"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_PACKAGE_HUB_ACCESS_MANAGER_GRPC_AUTH_TOKEN "${KODEX_ACCESS_MANAGER_GRPC_AUTH_TOKEN}"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_PROVIDER_HUB_ACCESS_MANAGER_GRPC_AUTH_TOKEN "${KODEX_ACCESS_MANAGER_GRPC_AUTH_TOKEN}"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_GOVERNANCE_MANAGER_ACCESS_MANAGER_GRPC_AUTH_TOKEN "${KODEX_ACCESS_MANAGER_GRPC_AUTH_TOKEN}"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_FLEET_MANAGER_ACCESS_MANAGER_GRPC_AUTH_TOKEN "${KODEX_ACCESS_MANAGER_GRPC_AUTH_TOKEN}"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_RUNTIME_MANAGER_ACCESS_MANAGER_GRPC_AUTH_TOKEN "${KODEX_ACCESS_MANAGER_GRPC_AUTH_TOKEN}"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_RUNTIME_MANAGER_FLEET_MANAGER_GRPC_AUTH_TOKEN "${KODEX_FLEET_MANAGER_GRPC_AUTH_TOKEN}"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_AGENT_MANAGER_PACKAGE_HUB_GRPC_AUTH_TOKEN "${KODEX_PACKAGE_HUB_GRPC_AUTH_TOKEN}"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_AGENT_MANAGER_PROJECT_CATALOG_GRPC_AUTH_TOKEN "${KODEX_PROJECT_CATALOG_GRPC_AUTH_TOKEN}"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_AGENT_MANAGER_RUNTIME_MANAGER_GRPC_AUTH_TOKEN "${KODEX_RUNTIME_MANAGER_GRPC_AUTH_TOKEN}"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_AGENT_MANAGER_PROVIDER_HUB_GRPC_AUTH_TOKEN "${KODEX_PROVIDER_HUB_GRPC_AUTH_TOKEN}"

set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_ACCESS_MANAGER_DATABASE_NAME "kodex_access_manager"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_PROJECT_CATALOG_DATABASE_NAME "kodex_project_catalog"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_PACKAGE_HUB_DATABASE_NAME "kodex_package_hub"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_PROVIDER_HUB_DATABASE_NAME "kodex_provider_hub"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_GOVERNANCE_MANAGER_DATABASE_NAME "kodex_governance_manager"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_INTERACTION_HUB_DATABASE_NAME "kodex_interaction_hub"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_FLEET_MANAGER_DATABASE_NAME "kodex_fleet_manager"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_RUNTIME_MANAGER_DATABASE_NAME "kodex_runtime_manager"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_AGENT_MANAGER_DATABASE_NAME "kodex_agent_manager"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_PLATFORM_EVENT_LOG_DATABASE_NAME "kodex_platform_event_log"

set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_PLATFORM_EVENT_LOG_DATABASE_DSN "$(postgres_uri "$KODEX_POSTGRES_USER" "$KODEX_POSTGRES_PASSWORD" postgres 5432 "$KODEX_PLATFORM_EVENT_LOG_DATABASE_NAME")"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_ACCESS_MANAGER_DATABASE_DSN "$(postgres_uri "$KODEX_POSTGRES_USER" "$KODEX_POSTGRES_PASSWORD" postgres 5432 "$KODEX_ACCESS_MANAGER_DATABASE_NAME")"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_PROJECT_CATALOG_DATABASE_DSN "$(postgres_uri "$KODEX_POSTGRES_USER" "$KODEX_POSTGRES_PASSWORD" postgres 5432 "$KODEX_PROJECT_CATALOG_DATABASE_NAME")"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_PACKAGE_HUB_DATABASE_DSN "$(postgres_uri "$KODEX_POSTGRES_USER" "$KODEX_POSTGRES_PASSWORD" postgres 5432 "$KODEX_PACKAGE_HUB_DATABASE_NAME")"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_PROVIDER_HUB_DATABASE_DSN "$(postgres_uri "$KODEX_POSTGRES_USER" "$KODEX_POSTGRES_PASSWORD" postgres 5432 "$KODEX_PROVIDER_HUB_DATABASE_NAME")"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_GOVERNANCE_MANAGER_DATABASE_DSN "$(postgres_uri "$KODEX_POSTGRES_USER" "$KODEX_POSTGRES_PASSWORD" postgres 5432 "$KODEX_GOVERNANCE_MANAGER_DATABASE_NAME")"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_INTERACTION_HUB_DATABASE_DSN "$(postgres_uri "$KODEX_POSTGRES_USER" "$KODEX_POSTGRES_PASSWORD" postgres 5432 "$KODEX_INTERACTION_HUB_DATABASE_NAME")"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_FLEET_MANAGER_DATABASE_DSN "$(postgres_uri "$KODEX_POSTGRES_USER" "$KODEX_POSTGRES_PASSWORD" postgres 5432 "$KODEX_FLEET_MANAGER_DATABASE_NAME")"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_RUNTIME_MANAGER_DATABASE_DSN "$(postgres_uri "$KODEX_POSTGRES_USER" "$KODEX_POSTGRES_PASSWORD" postgres 5432 "$KODEX_RUNTIME_MANAGER_DATABASE_NAME")"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_AGENT_MANAGER_DATABASE_DSN "$(postgres_uri "$KODEX_POSTGRES_USER" "$KODEX_POSTGRES_PASSWORD" postgres 5432 "$KODEX_AGENT_MANAGER_DATABASE_NAME")"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_ACCESS_MANAGER_EVENT_LOG_DATABASE_DSN "$KODEX_PLATFORM_EVENT_LOG_DATABASE_DSN"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_PACKAGE_HUB_EVENT_LOG_DATABASE_DSN "$KODEX_PLATFORM_EVENT_LOG_DATABASE_DSN"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_PROVIDER_HUB_EVENT_LOG_DATABASE_DSN "$KODEX_PLATFORM_EVENT_LOG_DATABASE_DSN"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_GOVERNANCE_MANAGER_EVENT_LOG_DATABASE_DSN "$KODEX_PLATFORM_EVENT_LOG_DATABASE_DSN"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_INTERACTION_HUB_EVENT_LOG_DATABASE_DSN "$KODEX_PLATFORM_EVENT_LOG_DATABASE_DSN"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_FLEET_MANAGER_EVENT_LOG_DATABASE_DSN "$KODEX_PLATFORM_EVENT_LOG_DATABASE_DSN"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_RUNTIME_MANAGER_EVENT_LOG_DATABASE_DSN "$KODEX_PLATFORM_EVENT_LOG_DATABASE_DSN"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_AGENT_MANAGER_EVENT_LOG_DATABASE_DSN "$KODEX_PLATFORM_EVENT_LOG_DATABASE_DSN"

set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_PROJECT_DB_ADMIN_HOST "$KODEX_PROJECT_DB_ADMIN_HOST"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_PROJECT_DB_ADMIN_PORT "$KODEX_PROJECT_DB_ADMIN_PORT"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_PROJECT_DB_ADMIN_USER "$KODEX_POSTGRES_USER"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_PROJECT_DB_ADMIN_PASSWORD "$KODEX_POSTGRES_PASSWORD"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_PROJECT_DB_ADMIN_SSLMODE "$KODEX_PROJECT_DB_ADMIN_SSLMODE"
set_env_default "$BOOTSTRAP_ENV_FILE" KODEX_PROJECT_DB_ADMIN_DATABASE "$KODEX_PROJECT_DB_ADMIN_DATABASE"

log "Runtime env prepared"
