#!/bin/bash

set -eu

# EBICS details
EBICS_URL="http://localhost:5000/ebicsweb"
HOST_ID="HOST01"
PARTNER_ID="PARTNER1"
USER_ID="USER1"

# This is used _both_ at Sandbox and at Nexus.
# Basically, Nexus imports the offered bank account
# using the same name used by the Sandbox.
BANK_ACCOUNT_LABEL="my-bank-account"
BANK_CONNECTION_LABEL="my-bank-connection"
FACADE_LABEL="my-facade"

export LIBEUFIN_SANDBOX_USERNAME=exchange
export LIBEUFIN_SANDBOX_PASSWORD=x
export LIBEUFIN_SANDBOX_URL=http://localhost:5000/
libeufin-cli sandbox demobank register --name "Exchange Company"

export LIBEUFIN_SANDBOX_USERNAME=fortytwo
export LIBEUFIN_SANDBOX_PASSWORD=x
export LIBEUFIN_SANDBOX_URL=http://localhost:5000/
libeufin-cli sandbox demobank register \
  --name User42 --iban FR7630006000011234567890189

export LIBEUFIN_SANDBOX_USERNAME=fortythree
export LIBEUFIN_SANDBOX_PASSWORD=x
export LIBEUFIN_SANDBOX_URL=http://localhost:5000/
libeufin-cli sandbox demobank register \
  --name User43 --iban GB33BUKB20201555555555

export LIBEUFIN_SANDBOX_USERNAME=admin
export LIBEUFIN_SANDBOX_PASSWORD=secret
export LIBEUFIN_SANDBOX_URL=http://localhost:5000/
echo -n "Create EBICS host at Sandbox..."
libeufin-cli sandbox \
  --sandbox-url "http://localhost:5000" \
  ebicshost create --host-id $HOST_ID
echo " OK"

echo -n "Create exchange EBICS subscriber at Sandbox..."
libeufin-cli sandbox \
  demobank new-ebicssubscriber --host-id $HOST_ID \
  --user-id $USER_ID --partner-id $PARTNER_ID \
  --bank-account exchange # that's a username _and_ a bank account name
echo " OK"
unset LIBEUFIN_SANDBOX_USERNAME
unset LIBEUFIN_SANDBOX_PASSWORD
unset LIBEUFIN_SANDBOX_URL

export LIBEUFIN_NEXUS_USERNAME=exchange
export LIBEUFIN_NEXUS_PASSWORD=x
export LIBEUFIN_NEXUS_URL=http://localhost:5001/

echo -n "Create the exchange (super)user at Nexus..."
libeufin-nexus superuser exchange --password x
echo " DONE"

echo -n "Creating a EBICS connection at Nexus..."
libeufin-cli connections new-ebics-connection \
  --ebics-url $EBICS_URL \
  --host-id $HOST_ID \
  --partner-id $PARTNER_ID \
  --ebics-user-id $USER_ID \
  $BANK_CONNECTION_LABEL
echo " OK"

echo -n "Setup EBICS keying..."
libeufin-cli connections connect $BANK_CONNECTION_LABEL > /dev/null
echo " OK"

echo -n "Download bank account name from Sandbox..."
libeufin-cli connections download-bank-accounts $BANK_CONNECTION_LABEL
echo " OK"

echo -n "Importing bank account info into Nexus..."
libeufin-cli connections import-bank-account \
  --offered-account-id exchange \
  --nexus-bank-account-id $BANK_ACCOUNT_LABEL \
  $BANK_CONNECTION_LABEL
echo " OK"

echo -n "Create the Taler facade at Nexus..."
libeufin-cli facades \
  new-taler-wire-gateway-facade \
  --currency KUDOS --facade-name $FACADE_LABEL \
  $BANK_CONNECTION_LABEL $BANK_ACCOUNT_LABEL
echo " DONE"

echo -n Setup payments submission task..
# Tries every second.
libeufin-cli accounts task-schedule \
  --task-type submit \
  --task-name exchange-payments \
  --task-cronspec "* * *" \
  $BANK_ACCOUNT_LABEL
echo OK
# Tries every second.  Ask C52
echo -n Setup history fetch task..
libeufin-cli accounts task-schedule \
  --task-type fetch \
  --task-name exchange-history \
  --task-cronspec "* * *" \
  --task-param-level report \
  --task-param-range-type latest \
  $BANK_ACCOUNT_LABEL
echo OK

# unset, in case the script gets 'source'd.
unset LIBEUFIN_NEXUS_USERNAME
unset LIBEUFIN_NEXUS_PASSWORD
unset LIBEUFIN_NEXUS_URL