#!/usr/bin/env bash

# This script generates the ctor-keystore[0-9]+ test data in
# `./crates/arti/tests/testcases/hsc-extra/hsc.in/local`
#
# Run this script from the root directory of the project:
# ```bash
# rm -r ./crates/arti/tests/testcases/hsc-extra/hsc.in/local/ctor-keystore*
# ./maint/keygen-client-auth-test/generate
# ```

set -eou pipefail

DIR="./crates/arti/tests/testcases/hsc-extra/hsc.in/local"
PACKAGE="keygen-client-auth-test"
BIN_PATH="./target/debug/${PACKAGE}"

ADDR1="rh5d6reakhpvuxe2t3next6um6iiq4jf43m7gmdrphfhopfpnoglzcyd.onion"
KEY1="service1.auth_private"

ADDR2="2gzyxa5ihm7nsggfxnu52rck2vv4rvmdlkiu3zzui5du4xyclen53wid.onion"
KEY2="service2.auth_private"

rm -rf "$DIR"/ctor-keystore*

create_keystore() {
    local keystore_dir="${DIR}/$1"
    mkdir "$keystore_dir"
    echo "$keystore_dir"
}

create_key() {
    local file="$1/$2"
    "$BIN_PATH" --hsid "$3" --priv-path "$file" 1> /dev/null
    echo "$file"
}

if [ ! -d $DIR ]; then
    echo "Did not find './crates/arti/tests/testcases/hsc-extra/hsc.in/local'" 1>&2
    echo "directory in $(pwd). Cannot proceed." 1>&2
    echo "Hint: run this script from the workspace root" 1>&2
    exit 1
fi

cargo build --bin "$PACKAGE"

export ARTI_TEST_PRNG="deterministic"

keystore_dir=$(create_keystore "ctor-keystore1")
create_key "$keystore_dir" "$KEY1" "$ADDR1"
create_key "$keystore_dir" "$KEY2" "$ADDR2"

keystore_dir=$(create_keystore "ctor-keystore2")
create_key "$keystore_dir" "$KEY1" "$ADDR1"
key=$(create_key "$keystore_dir" "$KEY2" "$ADDR2")
cp "$key" "${keystore_dir}/service2_replica.auth_private"

keystore_dir=$(create_keystore "ctor-keystore3")
key="${keystore_dir}/invalid_key.auth_private"
echo "Invalid Key" > "$key"

keystore_dir=$(create_keystore "ctor-keystore4")
create_key "$keystore_dir" "invalid_entry" $ADDR1

keystore_dir=$(create_keystore "ctor-keystore5")
create_key "$keystore_dir" "$KEY1" "$ADDR1"
create_key "$keystore_dir" "$KEY2" "$ADDR2"
create_key "$keystore_dir" "invalid_entry" $ADDR1
