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

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_DIR="$(cd "${SCRIPT_DIR}/../.." && pwd)"
ENV_FILE="${ENV_FILE:-${REPO_DIR}/deploy/env/cam1.env}"

if [[ "${EUID}" -ne 0 ]]; then
  echo "Run this script with sudo or as root."
  exit 1
fi

if [[ ! -f "${ENV_FILE}" ]]; then
  echo "Missing env file: ${ENV_FILE}"
  exit 1
fi

source "${ENV_FILE}"

: "${CAM1_SOURCE_RTSP:?CAM1_SOURCE_RTSP must be set in ${ENV_FILE}}"

SITE_DOMAIN="${SITE_DOMAIN:-dev.cc-group.org}"
SITE_ROOT="${SITE_ROOT:-/var/www/${SITE_DOMAIN}}"
LETSENCRYPT_EMAIL="${LETSENCRYPT_EMAIL:-admin@example.com}"
export SITE_DOMAIN SITE_ROOT LETSENCRYPT_EMAIL REPO_DIR ENV_FILE CAM1_SOURCE_RTSP

bash "${SCRIPT_DIR}/render-templates.sh"

mkdir -p "${SITE_ROOT}" /var/www/ws_rtsp_proxy

if [[ "${REPO_DIR}" != "${SITE_ROOT}/vidx_embed" ]]; then
  ln -sfn "${REPO_DIR}" "${SITE_ROOT}/vidx_embed"
fi
cp -f "${REPO_DIR}/deploy/ws_rtsp/index.html" /var/www/ws_rtsp_proxy/index.html

if [[ ! -f "${SITE_ROOT}/index.html" ]]; then
  cat > "${SITE_ROOT}/index.html" <<HTML
<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="refresh" content="0; url=/vidx_embed/index-page.html">
    <title>${SITE_DOMAIN}</title>
  </head>
  <body>
    <p>Redirecting to <a href="/vidx_embed/index-page.html">VIDX Embed</a>.</p>
  </body>
</html>
HTML
fi

mkdir -p /root/mediamtx
cp -f "${REPO_DIR}/deploy/mediamtx/mediamtx.yml" /root/mediamtx/mediamtx.yml
cp -f "${REPO_DIR}/.rendered/cam1.service" /etc/systemd/system/cam1.service
cp -f "${REPO_DIR}/.rendered/ws_rtsp.ini" /etc/ws_rtsp.ini
cp -f "${REPO_DIR}/.rendered/${SITE_DOMAIN}.conf" "/etc/apache2/sites-available/${SITE_DOMAIN}.conf"
cp -f "${REPO_DIR}/deploy/apache/ws_rtsp_proxy_stream.conf" /etc/apache2/conf-available/ws_rtsp_proxy_stream.conf

a2enconf ws_rtsp_proxy_stream >/dev/null
a2ensite "${SITE_DOMAIN}.conf" >/dev/null

ssl_cert="/etc/letsencrypt/live/${SITE_DOMAIN}/fullchain.pem"
ssl_key="/etc/letsencrypt/live/${SITE_DOMAIN}/privkey.pem"
ssl_options="/etc/letsencrypt/options-ssl-apache.conf"

if [[ -f "${ssl_cert}" && -f "${ssl_key}" && -f "${ssl_options}" ]]; then
  cp -f "${REPO_DIR}/.rendered/${SITE_DOMAIN}-le-ssl.conf" "/etc/apache2/sites-available/${SITE_DOMAIN}-le-ssl.conf"
  a2ensite "${SITE_DOMAIN}-le-ssl.conf" >/dev/null
fi

a2dissite 000-default >/dev/null 2>&1 || true

systemctl daemon-reload
systemctl enable mediamtx cam1 ws_rtsp apache2 >/dev/null
systemctl restart mediamtx
systemctl restart ws_rtsp
systemctl restart cam1
apache2ctl configtest
systemctl reload apache2
