#!/usr/bin/env bash

set -euo pipefail

source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/oysterun_service_common.sh"

EXPECTED_HOST_PID=""
ALLOW_OPERATION_ID=""
EXPECTED_RETAINED_CURRENT_HOST_CWD=""
EXPECTED_SOURCE_SERVICE_DEFINITION_SHA256=""
EXPECTED_TARGET_SERVICE_DEFINITION_SHA256=""
COMMON_ARGS=()

while [[ $# -gt 0 ]]; do
  case "$1" in
    --expected-host-pid)
      [[ $# -ge 2 ]] || { echo "[oysterun-service] error: --expected-host-pid requires a value" >&2; exit 2; }
      EXPECTED_HOST_PID="$2"
      shift 2
      ;;
    --allow-operation-id)
      [[ $# -ge 2 ]] || { echo "[oysterun-service] error: --allow-operation-id requires a value" >&2; exit 2; }
      ALLOW_OPERATION_ID="$2"
      shift 2
      ;;
    --expected-retained-current-host-cwd)
      [[ $# -ge 2 ]] || { echo "[oysterun-service] error: --expected-retained-current-host-cwd requires a value" >&2; exit 2; }
      EXPECTED_RETAINED_CURRENT_HOST_CWD="$2"
      shift 2
      ;;
    --expected-source-service-definition-sha256)
      [[ $# -ge 2 ]] || { echo "[oysterun-service] error: --expected-source-service-definition-sha256 requires a value" >&2; exit 2; }
      EXPECTED_SOURCE_SERVICE_DEFINITION_SHA256="$2"
      shift 2
      ;;
    --expected-target-service-definition-sha256)
      [[ $# -ge 2 ]] || { echo "[oysterun-service] error: --expected-target-service-definition-sha256 requires a value" >&2; exit 2; }
      EXPECTED_TARGET_SERVICE_DEFINITION_SHA256="$2"
      shift 2
      ;;
    *)
      COMMON_ARGS+=("$1")
      shift
      ;;
  esac
done

if [[ "${#COMMON_ARGS[@]}" -gt 0 ]]; then
  parse_common_args "${COMMON_ARGS[@]}"
else
  parse_common_args
fi
configure_stack_runtime
preflight_host_restart_readiness \
  "${EXPECTED_HOST_PID}" \
  "${ALLOW_OPERATION_ID}" \
  "${EXPECTED_RETAINED_CURRENT_HOST_CWD}" \
  "${EXPECTED_SOURCE_SERVICE_DEFINITION_SHA256}" \
  "${EXPECTED_TARGET_SERVICE_DEFINITION_SHA256}"
