#!/bin/sh
set -eu

PD_ENDPOINT="${PD_ENDPOINT:-http://pd:2379}"
KEYSPACE_NAME="${KEYSPACE_NAME:-local_normal}"
GC_CONFIG="gc_management_type=keyspace_level"

echo "waiting for PD at ${PD_ENDPOINT}"
for i in $(seq 1 120); do
    if /pd-ctl -u "${PD_ENDPOINT}" member >/tmp/pd-member.out 2>/tmp/pd-member.err; then
        break
    fi
    if [ "$i" -eq 120 ]; then
        echo "PD did not become ready" >&2
        cat /tmp/pd-member.err >&2 || true
        exit 1
    fi
    sleep 1
done

keyspace_list() {
    /pd-ctl -u "${PD_ENDPOINT}" keyspace list
}

echo "waiting for SYSTEM keyspace"
for i in $(seq 1 120); do
    if keyspace_list >/tmp/keyspaces.json 2>/tmp/keyspaces.err &&
        grep -q '"name"[[:space:]]*:[[:space:]]*"SYSTEM"' /tmp/keyspaces.json; then
        break
    fi
    if [ "$i" -eq 120 ]; then
        echo "SYSTEM keyspace was not visible in PD" >&2
        cat /tmp/keyspaces.err >&2 || true
        cat /tmp/keyspaces.json >&2 || true
        exit 1
    fi
    sleep 1
done

if keyspace_list | grep -q "\"name\"[[:space:]]*:[[:space:]]*\"${KEYSPACE_NAME}\""; then
    echo "keyspace ${KEYSPACE_NAME} already exists"
else
    echo "creating keyspace ${KEYSPACE_NAME} with ${GC_CONFIG}"
    /pd-ctl -u "${PD_ENDPOINT}" keyspace create "${KEYSPACE_NAME}" --config "${GC_CONFIG}"
fi

echo "verifying keyspaces"
for i in $(seq 1 60); do
    keyspace_list >/tmp/keyspaces.json
    if grep -q '"name"[[:space:]]*:[[:space:]]*"SYSTEM"' /tmp/keyspaces.json &&
        grep -q "\"name\"[[:space:]]*:[[:space:]]*\"${KEYSPACE_NAME}\"" /tmp/keyspaces.json &&
        grep -q '"gc_management_type"[[:space:]]*:[[:space:]]*"keyspace_level"' /tmp/keyspaces.json; then
        cat /tmp/keyspaces.json
        exit 0
    fi
    sleep 1
done

echo "keyspace verification failed" >&2
cat /tmp/keyspaces.json >&2 || true
exit 1
