#!/usr/bin/env bash
# site/remove -- destructive; requires typing the domain back
set -o pipefail
SELF=$(readlink -f "${BASH_SOURCE[0]}")
NV_BASE=$(cd "$(dirname "$SELF")/../../.." && pwd)
export NV_BASE
# shellcheck source=/dev/null
. "$NV_BASE/lib/core/bootstrap.sh"

nv_require_root || exit 1

ui_header "$(t site_m_remove)"
if [ "$(nv_site_count)" -eq 0 ]; then
    ui_info "$(t site_none)"
    exit 0
fi
ui_info "$(nv_site_list | paste -sd' ' -)"
ui_blank

if [ $# -ge 1 ]; then domain=$1; else
    printf '  %s: ' "$(t site_prompt_domain)"
    read -r domain || exit 130
fi
domain=$(nv_lower "$(nv_trim "$domain")")

nv_site_exists "$domain" || { ui_err "$(t site_not_registered)"; exit 2; }

ui_blank
ui_warn "$(t site_remove_warn "$domain")"
ui_confirm_typed "$(t site_remove_confirm)" "$domain" || { ui_info "$(t pf_cancelled)"; exit 3; }

keep_db=1; keep_files=1
ui_confirm "$(t site_remove_drop_db)" n && keep_db=0
ui_confirm "$(t site_remove_drop_files)" n && keep_files=0

nv_lock_acquire "site:$domain" 10 || { nv_fail 6199 "$(t lock_busy "$domain")"; exit 1; }

db=$(nv_site_get "$domain" db_name)
db_user=$(nv_site_get "$domain" db_user)
root=$(nv_site_get "$domain" root_path)

ui_step "$(t site_step_unvhost)"
rm -f "/etc/nginx/sites-enabled/$domain.conf"
nv_backup_path "/etc/nginx/sites-available/$domain.conf" remove-site >/dev/null 2>&1 || true
rm -f "/etc/nginx/sites-available/$domain.conf"

rm -f "/etc/php/8.3/fpm/pool.d/$domain.conf"

if [ "$keep_db" = "0" ] && [ -n "$db" ] && db_available; then
    ui_step "$(t site_step_drop_db)"
    db_root_exec "DROP DATABASE IF EXISTS \`$db\`" >/dev/null 2>&1 || true
    [ -n "$db_user" ] && db_root_exec "DROP USER IF EXISTS '$db_user'@'localhost'" >/dev/null 2>&1 || true
fi

rm -f "${NV_STATE_DIR}/sites/$domain.secret"

if [ "$keep_files" = "0" ]; then
    ui_step "$(t site_step_drop_files)"
    nv_backup_path "$root" remove-site >/dev/null 2>&1 || true
    rm -rf "$root"
    if id "$domain" >/dev/null 2>&1; then userdel "$domain" >/dev/null 2>&1 || true; fi
fi

nv_site_delete "$domain"
svc_reload "$(php_fpm_service 8.3)"
nginx -t >/dev/null 2>&1 && svc_reload nginx
nv_lock_release "site:$domain"

ui_ok "$(t site_removed "$domain")"
[ "$keep_db" = "1" ] && ui_info "$(t site_kept_db "$db")"
[ "$keep_files" = "1" ] && ui_info "$(t site_kept_files "$root")"
exit 0
