#!/usr/bin/env bash
set -ex

# Remove ./out folder
rm -rf ./out

export ETH_GAS=${ETH_GAS:-"7000000"}
unset SOLC_FLAGS

# Get config variables
export CONFIG_STEP=${CONFIG_STEP:-"step-1"}
CONFIG_FILE="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )/$CONFIG_STEP.json"

# Send ETH to Omnia From Address
seth send "$(jq -r ".omniaFromAddr" "$CONFIG_FILE")" --value "$(seth --to-wei 10000 eth)"

# Deploy Values or Medians + OSMs (if delay > 0) (no solc optimization)
cd contracts/osm
dapp build
cd ../median
dapp build

tokens=$(jq -r ".tokens | keys_unsorted[]" "$CONFIG_FILE")
for token in $tokens; do
    type=$(jq -r ".tokens.${token} | .pip | .type" "$CONFIG_FILE")
    if [ "${type}" = "median" ]; then
        cd ../median
        eval export "\VAL_${token}=$(dapp create Median "$(seth --to-bytes32 "$(seth --from-ascii "${token}USD")")")"
        signers=$(jq -r ".tokens.${token} | .pip | .signers | .[]" "$CONFIG_FILE")
        for signer in $signers; do
            seth send "$(eval echo "\$VAL_${token}")" 'lift(address)' "$signer"
        done
	    seth send "$(eval echo "\$VAL_${token}")" 'setMin(uint256)' "$(seth --to-uint256 3)"
    fi
    if [ "${type}" = "value" ]; then
        cd ../osm
        eval export "\VAL_${token}=$(dapp create DSValue)"
    fi

    osm_delay=$(jq -r ".tokens.${token} | .pip | .osmDelay" "$CONFIG_FILE")
    if [ "$osm_delay" -gt 0 ]; then
        cd ../osm
        eval export "\PIP_${token}=$(dapp create OSM "$(eval echo "\$VAL_${token}")")"
        seth send "$(eval echo "\$PIP_${token}")" 'step(uint16)' "$osm_delay"
    else
        eval export "PIP_${token}=\$VAL_${token}"
    fi
done

cd ../../

# shellcheck source=/dev/null
./base-deploy

echo "STEP 1 COMPLETED SUCCESSFULLY"
