#!/bin/bash -e

# Copyright 2017-2026 The Wazo Authors  (see the AUTHORS file)
# SPDX-License-Identifier: GPL-3.0-or-later

force=0

usage() {
    cat >&2 <<EOF
Usage: $0 [-f]
Reset Wazo database and files.

  -f    do not prompt before resetting
EOF
    exit 1
}

on_reset_error() {
    cat >&2 <<EOF
An error occurred during the reset. Aborting.
EOF
    exit 1
}

wait_until_wazo_auth_ready(){
    WAIT_TIMEOUT=60
    WAIT_INTERVAL=1
    while ! ss --listening --tcp '( sport = :9497 )' | grep -q LISTEN; do
        sleep ${WAIT_INTERVAL}
        WAIT_TIMEOUT=$((WAIT_TIMEOUT - WAIT_INTERVAL))
        if [ "$WAIT_TIMEOUT" -eq 0 ]; then
            echo "wazo-auth is not ready"
            return 1
        fi
    done
}

while getopts ':f' opt; do
    case "$opt" in
        f)
            force=1
            ;;
        *)
            usage
            ;;
    esac
done

echo 'WARNING: This will erase all Wazo data and restart the Wazo services.'

if [ "$force" = 0 ]; then
    read -p 'Are you sure you want to reset Wazo [y/N]? ' answer
    if [ "$answer" != y -a "$answer" != Y ]; then
        exit 0
    fi
fi

cd /tmp
trap on_reset_error ERR
wazo-service stop

echo 'Recreating postgresql database...'
xivo-init-db --drop --init

echo 'Cleaning up wazo-auth-cli configs...'
rm -rf /root/.config/wazo-auth-cli

echo 'Reconfiguring xivo-manage-db package...'
dpkg-reconfigure xivo-manage-db --frontend noninteractive
echo 'Reconfiguring wazo-auth package...'
dpkg-reconfigure wazo-auth --frontend noninteractive
echo 'Reconfiguring wazo-call-logd package...'
dpkg-reconfigure wazo-call-logd --frontend noninteractive
echo 'Reconfiguring wazo-chatd package...'
dpkg-reconfigure wazo-chatd --frontend noninteractive
echo 'Reconfiguring wazo-dird package...'
dpkg-reconfigure wazo-dird --frontend noninteractive
echo 'Reconfiguring wazo-webhookd package...'
dpkg-reconfigure wazo-webhookd --frontend noninteractive

echo 'Recreating internal services access...'
wait_until_wazo_auth_ready
wazo-auth-keys service update --recreate

echo 'Cleaning up wazo-provd configs and devices...'
rm -rf /var/lib/wazo-provd/jsondb/*

trap ERR
wazo-service restart
systemctl restart wazo-setupd

echo 'Wazo reset successful.'
