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

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# shellcheck disable=SC1091
source "${SCRIPT_DIR}/lib.sh"

require_root
load_vars

mkdir -p "$(dirname "${MAILCOW_DIR}")"

if [[ ! -d "${MAILCOW_DIR}/.git" ]]; then
  git clone https://github.com/mailcow/mailcow-dockerized "${MAILCOW_DIR}"
fi

cd "${MAILCOW_DIR}"
git fetch origin
git checkout "${MAILCOW_BRANCH}"
git pull --ff-only origin "${MAILCOW_BRANCH}"

if [[ ! -f mailcow.conf ]]; then
  MAILCOW_HOSTNAME="${MAIL_UI_HOSTNAME}" \
  MAILCOW_TZ="${TIMEZONE}" \
  MAILCOW_BRANCH="${MAILCOW_BRANCH}" \
  SKIP_CLAMD="${MAILCOW_SKIP_CLAMD}" \
  ./generate_config.sh
fi

upsert_env_var mailcow.conf MAILCOW_TZ "${TIMEZONE}"
upsert_env_var mailcow.conf HTTP_BIND "127.0.0.1"
upsert_env_var mailcow.conf HTTP_PORT "8080"
upsert_env_var mailcow.conf HTTPS_BIND "127.0.0.1"
upsert_env_var mailcow.conf HTTPS_PORT "8443"
upsert_env_var mailcow.conf SKIP_CLAMD "${MAILCOW_SKIP_CLAMD}"
upsert_env_var mailcow.conf ADDITIONAL_SAN "${MX_HOSTNAME}"
upsert_env_var mailcow.conf TRUSTED_PROXIES "172.16.0.0/12"

docker compose pull
docker compose up -d

echo
echo "Mailcow containers started."
echo "Check status with: bash deploy/ubuntu/03-check-mailcow.sh"
