#!/usr/bin/env bash
# site/plugin -- list, install, enable, disable and update plugins
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_plugin)"

site_pick_domain "${1:-}" || exit $?
domain=$SITE_DOMAIN
root=$(nv_site_get "$domain" root_path "$(site_domain_root "$domain")")
user=$(site_web_user "$domain")
[ -f "$root/wp-config.php" ] || { ui_err "$(t wp_update_not_wp)"; exit 2; }
[ -x /usr/local/bin/wp ] || { ui_err "$(t site_wp_nocli)"; exit 1; }
WP="sudo -u $user /usr/local/bin/wp --path=$root"

$WP plugin list --fields=name,status,version,update --format=table 2>/dev/null | sed 's/^/  /'
ui_blank
ui_info "1) $(t plug_install)"
ui_info "2) $(t plug_enable)"
ui_info "3) $(t plug_disable)"
ui_info "4) $(t plug_update_all)"
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)
        printf '  %s: ' "$(t plug_slug)"
        read -r slug || exit 130
        slug=$(nv_trim "$slug")
        nv_valid_ident "$slug" || { ui_err "$(t plug_bad_slug)"; exit 2; }
        $WP plugin install "$slug" --activate 2>&1 | tail -n 5 | sed 's/^/    /' \
            || { nv_fail 3503 "$(t plug_failed)"; exit 1; }
        msg="$(t plug_installed "$slug")"
        ;;
    2|3)
        printf '  %s: ' "$(t plug_slug)"
        read -r slug || exit 130
        slug=$(nv_trim "$slug")
        nv_valid_ident "$slug" || { ui_err "$(t plug_bad_slug)"; exit 2; }
        if [ "$pick" = "2" ]; then
            $WP plugin activate "$slug" >/dev/null 2>&1 || { nv_fail 3503 "$(t plug_failed)"; exit 1; }
            msg="$(t plug_enabled "$slug")"
        else
            $WP plugin deactivate "$slug" >/dev/null 2>&1 || { nv_fail 3503 "$(t plug_failed)"; exit 1; }
            msg="$(t plug_disabled "$slug")"
        fi
        ;;
    4)
        ui_warn "$(t plug_update_warn)"
        ui_confirm "$(t wp_update_confirm)" n || exit 0
        snap=$(site_snapshot "$domain" "pre-plugin-update-$domain")
        ui_ok "$(t backup_safety_at "$snap")"
        $WP plugin update --all 2>&1 | tail -n 10 | sed 's/^/    /' || true
        msg="$(t plug_updated)"
        ;;
    *) ui_err "$(t menu_invalid)"; exit 2 ;;
esac

nv_trace wp-plugin "$domain option=$pick"
ui_ok "$msg"
exit 0
