#!/usr/bin/env bash

set -euxo pipefail

CHAIN=$1
DOMAIN=$2

touch ~/.hushlogin

sed -i -E 's/#?PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config

mkdir -p \
  /etc/systemd/system/bitcoind.service.d \
  /etc/systemd/system/ord.service.d

printf "[Service]\nEnvironment=CHAIN=%s\n" $CHAIN \
  | tee /etc/systemd/system/bitcoind.service.d/override.conf \
  > /etc/systemd/system/ord.service.d/override.conf

hostnamectl set-hostname $DOMAIN

apt-get install --yes \
  acl \
  clang \
  libsqlite3-dev\
  libssl-dev \
  pkg-config \
  vim

if ! which bitcoind; then
  wget -O bitcoin.tar.gz 'https://bitcoincore.org/bin/bitcoin-core-23.0/bitcoin-23.0-x86_64-linux-gnu.tar.gz'
  tar -xzvf bitcoin.tar.gz -C /usr/local/bin --strip-components=2 "bitcoin-23.0/bin/bitcoin-cli" "bitcoin-23.0/bin/bitcoind"
fi

bitcoind --version

if [[ ! -e ~/.cargo/env ]]; then
  curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
fi

source ~/.cargo/env

rustup update stable

cargo build --release
if [[ -f /usr/local/bin/ord ]]; then
  mv /usr/local/bin/ord /usr/local/bin/ord.bak
fi
cp target/release/ord /usr/local/bin/ord

id --user bitcoin || useradd --system bitcoin
id --user ord || useradd --system ord

cp deploy/bitcoind.service /etc/systemd/system/
mkdir -p /etc/bitcoin
cp deploy/bitcoin.conf /etc/bitcoin/bitcoin.conf
systemctl daemon-reload
systemctl enable bitcoind
systemctl restart bitcoind

case $CHAIN in
  main)
    COOKIE_FILE_DIR=/var/lib/bitcoind
    ;;
  signet)
    COOKIE_FILE_DIR=/var/lib/bitcoind/signet
    ;;
  *)
    echo "Unknown chain: $CHAIN"
    exit 1
    ;;
esac

while [[ ! -f $COOKIE_FILE_DIR/.cookie ]]; do
  echo "Waiting for bitcoind…"
  sleep 1
done

setfacl -m ord:x /var/lib/bitcoind
setfacl -m ord:x $COOKIE_FILE_DIR
setfacl -dm ord:r $COOKIE_FILE_DIR
setfacl -m ord:r $COOKIE_FILE_DIR/.cookie

cp deploy/ord.service /etc/systemd/system/
systemctl daemon-reload
systemctl enable ord
systemctl restart ord

while ! curl --fail https://$DOMAIN/status; do
  echo "Waiting for ord at https://$DOMAIN/status…"
  sleep 1
done
