#!/bin/bash

set -e

manifest_generation=$(dirname $0)/../manifest-generation

usage() {
  >&2 cat <<EOF
SYNOPSIS:
    Generate a windows manifest for a Diego deployment to accompany an existing CF deployment.

USAGE:
    $0 <MANDATORY ARGUMENTS> [OPTIONAL ARGUMENTS]

MANDATORY ARGUMENTS:
    -c <cf-path>        Path to CF manifest file.
    -i <iaas-path>      Path to IaaS-settings stub file.
    -p <property-path>  Path to property-overrides stub file.

OPTIONAL ARGUMENTS:
    -n <count-path>     Path to instance-count-overrides stub file.
    -v <versions-path>  Path to release-versions stub file.
    -R                  Opt into using local route-emitter configuration for cells.

EXAMPLE:
    $0 \\
      -c ../cf-release/bosh-lite/deployments/cf.yml \\
      -i manifest-generation/bosh-lite-stubs/iaas-settings.yml \\
      -p manifest-generation/bosh-lite-stubs/property-overrides.yml \\
      -n manifest-generation/bosh-lite-stubs/instance-count-overrides.yml \\
      -v manifest-generation/bosh-lite-stubs/release-versions.yml \\
      -R
      -Q
EOF
  exit 1
}

local_route_emitter_properties=""
sql_lock_overrides=""

while getopts "c:i:p:n:v:RQ" opt; do
  case $opt in
    c)
      cf_deployment_manifest=$OPTARG
      ;;
    i)
      iaas_settings=$OPTARG
      ;;
    p)
      property_overrides=$OPTARG
      ;;
    n)
      instance_counts=$OPTARG
      ;;
    v)
      release_versions=$OPTARG
      ;;
    R)
      local_route_emitter_properties="${manifest_generation}/enable-local-route-emitters-windows.yml";
      ;;
    Q)
      sql_lock_overrides="${manifest_generation}/enable-sql-lock.yml"
      ;;
    *)
      echo "Unknown arguments"
      usage
      ;;
  esac
done

if [ -z ${cf_deployment_manifest} ]; then
  >&2 echo "ERROR: CF manifest file is missing"
  argument_error=true
else
  if [ ! -f "${cf_deployment_manifest}" ]; then
    >&2 echo "ERROR: CF manifest '${cf_deployment_manifest}' is not a regular file"
    argument_error=true
  fi
fi

if [ -z ${iaas_settings} ]; then
  >&2 echo "ERROR: IaaS-settings stub file is missing"
  argument_error=true
else
  if [ ! -f "${iaas_settings}" ]; then
    >&2 echo "ERROR: IaaS Setting stub '${iaas_settings}' is not a regular file"
    argument_error=true
  fi
fi

if [ -z ${property_overrides} ]; then
  >&2 echo "ERROR: Property-overrides stub file is missing"
  argument_error=true

else
  if [ ! -f "${property_overrides}" ]; then
    >&2 echo "ERROR: Property-overrides stub '${property_overrides}' is not a regular file"
    argument_error=true
  fi
fi

if [[ ! -z "${instance_counts}" && ! -f "${instance_counts}" ]]; then
  >&2 echo "ERROR: Instance-count-overrides stub '${instance_counts}' is not a regular file"
  argument_error=true
fi

if [[ ! -z "${release_versions}" && ! -f "${release_versions}" ]]; then
  >&2 echo "ERROR: Release-versions stub '${release_versions}' is not a regular file"
  argument_error=true
fi

if [ ! -z $argument_error ]; then
  echo
  usage
fi

tmpdir=$(mktemp -d /tmp/diego-manifest.XXXXX)

spiff merge \
  ${manifest_generation}/config-from-cf.yml \
  ${manifest_generation}/config-from-cf-internal.yml \
  ${cf_deployment_manifest} \
  > ${tmpdir}/config-from-cf.yml

spiff merge \
  ${manifest_generation}/diego-windows.yml \
  ${release_versions} \
  ${local_route_emitter_properties} \
  ${property_overrides} \
  ${instance_counts} \
  ${sql_lock_overrides} \
  ${iaas_settings} \
  ${tmpdir}/config-from-cf.yml \
  > ${tmpdir}/diego-windows.yml

spiff merge \
  ${manifest_generation}/misc-templates/bosh.yml \
  ${tmpdir}/diego-windows.yml
