#!/usr/bin/env bash
# web/redirect -- choose the canonical hostname for a site
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 web_m_redirect)"

if [ "$(nv_site_count)" -eq 0 ]; then ui_info "$(t site_none)"; exit 0; fi

if [ $# -ge 1 ]; then domain=$1; else
    ui_info "$(nv_site_list | paste -sd' ' -)"
    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; }

cur=$(nv_site_get "$domain" canonical "")
ui_kv "$(t col_domain)" "$domain"
ui_kv "$(t web_canonical_now)" "${cur:-$(t web_canonical_both)}"
ui_blank
ui_info "1) $(t web_canonical_www)"
ui_info "2) $(t web_canonical_nonwww)"
ui_info "3) $(t web_canonical_both)"
ui_info "0) $(t menu_back)"
ui_blank

printf '  %s: ' "$(t menu_prompt_short)"
read -r pick || exit 130
case $pick in
    0) exit 0 ;;
    1) new=www ;;
    2) new=non-www ;;
    3) new='' ;;
    *) ui_err "$(t menu_invalid)"; exit 2 ;;
esac

if [ "$new" = "$cur" ]; then ui_info "$(t web_redirect_same)"; exit 0; fi

prev=$cur
nv_site_set "$domain" canonical "$new"
if ! site_apply_vhost "$domain"; then
    nv_site_set "$domain" canonical "$prev"
    site_apply_vhost "$domain" >/dev/null 2>&1 || true
    nv_fail 3201 "$(t site_fail_nginx)"
    exit 1
fi
svc_reload "$(nv_site_get "$domain" php_version "$NV_SITE_PHP_VERSION")"
nv_trace web-redirect "$domain ${new:-both}"

ui_ok "$(t web_redirect_done "$domain")"
exit 0
