#!/bin/sh

backup_application() {
  _do_backup() {
    ${BIRDHOUSE_EXE} --quiet compose run --rm -v ${BIRDHOUSE_BACKUP_VOLUME}:/backup stac-db sh -c 'mkdir -p /backup/stac; pg_dump -h stac-db -d ${PGDATABASE} -Fc > /backup/stac/postgres.dump'
  }
  backup_create_runner 'stac postgis database' _do_backup 'stac' 
}

restore_application() {
  _do_restore() { 
    ${BIRDHOUSE_EXE} --quiet compose run --rm -v ${BIRDHOUSE_BACKUP_VOLUME}:/backup stac-db sh -c 'dropdb -h stac-db ${PGDATABASE}; pg_restore -h stac-db -C -d postgres /backup/stac/postgres.dump'
  }
  backup_restore_runner 'stac postgis database' _do_restore 'stac' 'stac'
}

backup_representative() {
  _do_backup() {
    # WARNING: using BIRDHOUSE_LOG_LEVEL does not check whether is a valid log level for stac-populator.
    #  This may cause errors in the future if new log levels are introduced.
    #  It is assumed for the moment that equivalent log level are desired between the populator and the CLI
    #  when debugging the entire birdhouse backup process, or that ERROR/WARN/INFO are used otherwise.
    log INFO "Starting STAC populator [${STAC_POPULATOR_BACKUP_IMAGE}] for representative backup of STAC JSON data"
    docker run --rm \
               --network "${COMPOSE_PROJECT_NAME}_default" \
               -v ${BIRDHOUSE_BACKUP_VOLUME}:/backup \
               --user root \
               --env BIRDHOUSE_LOG_LEVEL=${BIRDHOUSE_LOG_LEVEL} \
               --entrypoint sh \
               ${STAC_POPULATOR_BACKUP_IMAGE} \
               -c 'mkdir /backup/stac-repr/; stac-populator --log-level-stderr ${BIRDHOUSE_LOG_LEVEL} export http://stac:8000/stac /backup/stac-repr/ --ignore-duplicate-ids'
  }
  backup_create_runner 'stac json objects' _do_backup
}

restore_representative() {
  _do_restore() {
    ${BIRDHOUSE_EXE} --quiet compose rm -f stac-db stac-migration
    docker volume rm "${COMPOSE_PROJECT_NAME}_stac-db"
    ${BIRDHOUSE_EXE} --quiet compose create stac-db
    ${BIRDHOUSE_EXE} --quiet compose start stac-db stac-migration stac
    count=0
    while [ "$(docker inspect --format='{{.State.Health.Status}}' stac)" != "healthy" ]; do
      [ "$count" -gt 5 ] && log ERROR "stac service is not healthy after 10 seconds" && return 1
      sleep 2
      count="$(( $count + 1 ))"
    done
    log INFO "Starting STAC populator [${STAC_POPULATOR_BACKUP_IMAGE}] for representative restore of STAC JSON data"
    docker run --rm \
               --network "${COMPOSE_PROJECT_NAME}_default" \
               -v ${BIRDHOUSE_BACKUP_VOLUME}:/backup \
               --user root \
               --env PYSTAC_STAC_VERSION_OVERRIDE="${PYSTAC_STAC_VERSION_OVERRIDE}" \
               ${STAC_POPULATOR_BACKUP_IMAGE} \
               --log-level-stderr ${BIRDHOUSE_LOG_LEVEL} \
               run DirectoryLoader http://stac:8000/stac /backup/stac-repr/
  }
  backup_restore_runner 'stac json objects' _do_restore 'stac-repr' 'stac stac-db stac-migration'
}
