#!/bin/bash
set -euo pipefail

# GameLift configuration; see https://docs.aws.amazon.com/cli/latest/reference/gamelift/create-fleet.html
{
    AWS_REGION="${AWS_REGION:-us-west-2}"   # may be overridden by environment variable
    CAPACITY=1
    MAX_CAPACITY=
}

function usage() {
    SCRIPT_NAME="$(basename "${BASH_SOURCE[0]}")"
    echo "$SCRIPT_NAME: wait until AWS GameLift achieves desired fleet capacity"
    echo "Usage:  $SCRIPT_NAME [OPTIONS]"
    echo ""
    echo "Options:"
    echo "  -f | --fleet-id FLEET_ID        set fleet-id (default: \$FLEET_ID=${FLEET_ID:-none})"
    echo "  -c | --capacity CAPACITY        wait for fleet capacity to match (default: $CAPACITY)"
    echo "  -m | --max-capacity CAPACITY    wait for fleet capacity to match (default: same as capacity)"
    echo "  -r | --region REGION            set AWS region (default: \$AWS_REGION=${AWS_REGION:-none})"
    echo "  -h | --help                     show this help message"
}

function parse_arguments () {
    SCRIPT_NAME="$(basename "${BASH_SOURCE[0]}")"
    eval set -- "$(getopt -o f:c:m:r:h --long fleet-id:,capacity:,max-capacity:,region:,help -n "$SCRIPT_NAME" -- "$@")"

    while true; do
        case "$1" in
            -f | --fleet-id     ) FLEET_ID="$2"     ; shift ; shift ;;
            -c | --capacity     ) CAPACITY="$2"     ; shift ; shift ;;
            -m | --max-capacity ) MAX_CAPACITY="$2" ; shift ; shift ;;
            -r | --region       ) AWS_REGION="$2"   ; shift ; shift ;;
            -h | --help         ) usage ; exit 0    ; shift ;;
            --                  ) shift ; break ;;
            *                   ) break ;;
        esac
    done

    if [[ $# -gt 0 ]]; then
        echo >&2 "ERROR: unknown arguments specified: " "$@"
        exit 1
    fi

    if [[ -z "${FLEET_ID:-}" ]]; then
        echo >&2 "ERROR: fleet id not specified"
        exit 1
    fi

    if [[ -z "${CAPACITY:-}" ]]; then
        echo >&2 "ERROR: capacity not specified"
        exit 1
    fi

    if [[ -z "${MAX_CAPACITY:-}" ]]; then
        MAX_CAPACITY="$CAPACITY"
    fi

    if [[ -z "${AWS_REGION:-}" ]]; then
        echo >&2 "ERROR: AWS region not specified"
        exit 1
    fi
}

parse_arguments "$@"

# Set fleet capacity
{
    echo -n "Setting fleet capacity: "
    aws gamelift update-fleet-capacity      \
        --fleet-id "$FLEET_ID"              \
        --desired-instance "$CAPACITY"      \
        --max-size "$MAX_CAPACITY"          \
        --region "$AWS_REGION"              \
        --query "FleetId"                   \
        --output text                       \
    #
}
