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

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)"
ENV_FILE="${SCRIPT_DIR}/.env_config"

if [[ ! -f "${ENV_FILE}" ]]; then
  echo "[error] missing env file: ${ENV_FILE}" >&2
  echo "[hint] cp ${SCRIPT_DIR}/.env_config.example ${ENV_FILE}" >&2
  exit 1
fi

# shellcheck disable=SC1090
source "${ENV_FILE}"

: "${SF_READONLY_CONFIG_PATH:?missing SF_READONLY_CONFIG_PATH}"
: "${SF_S3_OUTPUT_ROOT:?missing SF_S3_OUTPUT_ROOT}"
: "${SF_S3_PROFILE:?missing SF_S3_PROFILE}"
: "${SF_S3_BUCKET:?missing SF_S3_BUCKET}"
: "${SF_S3_PREFIX:?missing SF_S3_PREFIX}"
: "${SF_S3_CHUNK_SIZE_CDL:?missing SF_S3_CHUNK_SIZE_CDL}"
: "${SF_S3_CHUNK_SIZE_CV:?missing SF_S3_CHUNK_SIZE_CV}"
: "${SF_S3_LOG_DIR:?missing SF_S3_LOG_DIR}"
: "${SF_S3_LOCK_FILE:?missing SF_S3_LOCK_FILE}"

SNAPSHOT_DATE="${SNAPSHOT_DATE:-$(date +%F)}"
RUN_LABEL="${RUN_LABEL:-daily}"

mkdir -p "${SF_S3_OUTPUT_ROOT}" "${SF_S3_LOG_DIR}"

LOG_PATH="${SF_S3_LOG_DIR}/sf_to_s3_${SNAPSHOT_DATE}_${RUN_LABEL}.log"

exec 9>"${SF_S3_LOCK_FILE}"
if ! flock -n 9; then
  echo "[error] another sf_to_s3 run is active: ${SF_S3_LOCK_FILE}" >&2
  exit 1
fi

cd "${REPO_ROOT}"

{
  echo "[start] $(date '+%Y-%m-%d %H:%M:%S %z')"
  echo "[info] repo_root=${REPO_ROOT}"
  echo "[info] snapshot_date=${SNAPSHOT_DATE}"
  echo "[info] run_label=${RUN_LABEL}"
  echo "[info] profile=${SF_S3_PROFILE}"
  echo "[info] output_root=${SF_S3_OUTPUT_ROOT}"
  echo "[info] s3_bucket=${SF_S3_BUCKET}"
  echo "[info] s3_prefix=${SF_S3_PREFIX}"

  cmd=(
    python3
    "${SCRIPT_DIR}/run_phase1_source_snapshot.py"
    --config "${SF_READONLY_CONFIG_PATH}"
    --output-root "${SF_S3_OUTPUT_ROOT}"
    --profile "${SF_S3_PROFILE}"
    --snapshot-date "${SNAPSHOT_DATE}"
    --run-label "${RUN_LABEL}"
    --s3-bucket "${SF_S3_BUCKET}"
    --s3-prefix "${SF_S3_PREFIX}"
    --chunk-size-cdl "${SF_S3_CHUNK_SIZE_CDL}"
    --chunk-size-cv "${SF_S3_CHUNK_SIZE_CV}"
  )

  if [[ "${SF_S3_SKIP_S3_UPLOAD:-0}" == "1" ]]; then
    cmd+=(--skip-s3-upload)
  fi
  if [[ "${SF_S3_SKIP_CONTENT_DOCUMENT_LINK:-0}" == "1" ]]; then
    cmd+=(--skip-content-document-link)
  fi
  if [[ "${SF_S3_SKIP_CONTENT_VERSION:-0}" == "1" ]]; then
    cmd+=(--skip-content-version)
  fi
  if [[ "${SF_S3_SKIP_CONTENT_VERSION_BLOB:-0}" == "1" ]]; then
    cmd+=(--skip-content-version-blob)
  fi

  printf '[exec]'
  printf ' %q' "${cmd[@]}"
  printf '\n'

  "${cmd[@]}"

  echo "[done] $(date '+%Y-%m-%d %H:%M:%S %z')"
} 2>&1 | tee -a "${LOG_PATH}"
