#!/usr/bin/env bash
set -Eeuo pipefail
set +x
umask 077

readonly LABEL=REDIS02_Q132_ACTIVATION_CANDIDATE
readonly STATUS=LOCAL_ONLY_LOCKED_NOT_FOR_UPLOAD_OR_EXECUTION
readonly EXPECTED_HOST=sqjcredis02
readonly EXPECTED_IP=10.2.203.113
readonly DELIVERY_ARCHIVE_SHA256=6cbf051f83d6b989bb88d33cc47d1b4e4027653809e5bbf9ae6402b3762d9651
readonly ENTRY_SHA256=f2f4838c1481fb3b0f207b1ee1b0c1eb737b54eb4511ae1d9990c623c3b2520b
readonly Q131_IMPORT_PASS_RECEIPT_SHA256=__REQUIRED_AFTER_Q131_IMPORT_PASS__
readonly Q131_ACTIVATION_PASS_SHA256=__REQUIRED_AFTER_Q131_ACTIVATION_ARCHIVE_PASS__
readonly CONTROLLER_Q132_EXECUTE_GATE=LOCKED
readonly SCRIPT_PATH="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)/$(basename -- "${BASH_SOURCE[0]}")"

finish() {
    local rc=$?
    trap - EXIT
    printf 'END|%s|RC=%s\n' "$LABEL" "$rc"
    exit "$rc"
}
trap finish EXIT

static_validate() {
    bash -n "$SCRIPT_PATH"
    test "$STATUS" = LOCAL_ONLY_LOCKED_NOT_FOR_UPLOAD_OR_EXECUTION
    test "$EXPECTED_HOST" = sqjcredis02
    test "$EXPECTED_IP" = 10.2.203.113
    test "$CONTROLLER_Q132_EXECUTE_GATE" = LOCKED
    test "$Q131_IMPORT_PASS_RECEIPT_SHA256" = __REQUIRED_AFTER_Q131_IMPORT_PASS__
    test "$Q131_ACTIVATION_PASS_SHA256" = __REQUIRED_AFTER_Q131_ACTIVATION_ARCHIVE_PASS__
    grep -Fq 'q132 execute' "$SCRIPT_PATH"
    grep -Fq 'q132 verify' "$SCRIPT_PATH"
    grep -Fq 'q132 archive' "$SCRIPT_PATH"
    grep -Fq 'q132 rollback' "$SCRIPT_PATH"
    grep -Fq 'sentinel5.service sentinel7.service orchestrator.service' "$SCRIPT_PATH"
    grep -Fq 'VIP_STATE=ABSENT_REQUIRED' "$SCRIPT_PATH"
    echo 'Q132_ACTIVATION_CANDIDATE_STATIC_VALIDATE=PASS'
    echo 'Q132_ACTIVATION_CANDIDATE_EXECUTION=LOCKED'
}

future_activation_flow_not_dispatched() {
    # Promotion requires a separate reviewed copy. This candidate never
    # dispatches this function.
    local run_id activation_id
    test "$CONTROLLER_Q132_EXECUTE_GATE" = GRANTED
    test "$Q131_IMPORT_PASS_RECEIPT_SHA256" != __REQUIRED_AFTER_Q131_IMPORT_PASS__
    test "$Q131_ACTIVATION_PASS_SHA256" != __REQUIRED_AFTER_Q131_ACTIVATION_ARCHIVE_PASS__
    printf '%s  %s\n' "$DELIVERY_ARCHIVE_SHA256" /root/redis-q131-q132-delivery.tar.gz |
        sha256sum -c -
    printf '%s  %s\n' "$ENTRY_SHA256" /root/redis-q131-q132-delivery/redis-q131-q132 |
        sha256sum -c -
    run_id="q132-$(date -u +%Y%m%dT%H%M%SZ)"
    activation_id="${run_id}-activate"
    if ! /root/redis-q131-q132-delivery/redis-q131-q132 \
        q132 execute \
        --run-id "$run_id" \
        --q131-pass-sha "$Q131_ACTIVATION_PASS_SHA256"; then
        /root/redis-q131-q132-delivery/redis-q131-q132 \
            q132 rollback \
            --activation-run-id "$activation_id" \
            --run-id "${run_id}-rollback"
        return 1
    fi
    /root/redis-q131-q132-delivery/redis-q131-q132 \
        q132 verify \
        --run-id "${run_id}-verify" \
        --q131-pass-sha "$Q131_ACTIVATION_PASS_SHA256"
    /root/redis-q131-q132-delivery/redis-q131-q132 \
        q132 archive \
        --source-run-id "$run_id"
    for unit in sentinel5.service sentinel7.service orchestrator.service; do
        test "$(systemctl is-enabled "$unit" 2>/dev/null || true)" = disabled
        test "$(systemctl is-active "$unit" 2>/dev/null || true)" = inactive
    done
    echo 'VIP_STATE=ABSENT_REQUIRED'
    echo 'HA_CLAIM=PROHIBITED_IN_Q132'
}

printf 'BEGIN|%s|%s\n' "$LABEL" "$(date '+%Y-%m-%dT%H:%M:%S%z')"
case "${1:-}" in
    --static-validate)
        static_validate
        ;;
    *)
        echo "BLOCKED|$STATUS" >&2
        echo 'DEPENDENCY=Q131_IMPORT_PASS_AND_Q131_ACTIVATION_ARCHIVE_PASS_AND_CONTROLLER_Q132_EXECUTE_GATE' >&2
        exit 78
        ;;
esac
