#!/usr/bin/env bash
# backup/schedule -- install or remove the daily backup cron entry
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 backup_m_schedule)"

CRON=$(cron_dir)/nhanhvps-backup
SELF_CMD=$(command -v nhanhvps 2>/dev/null || printf '%s/bin/nhanhvps' "$NV_BASE")

ui_kv "$(t backup_cron_state)" "$([ -f "$CRON" ] && grep -qE '^[0-9*]' "$CRON" && echo "$(t state_enabled)" || echo "$(t state_disabled)")"
if [ -f "$CRON" ]; then
    ui_kv "$(t backup_cron_time)" "$(grep -oE '^[0-9]+ [0-9]+' "$CRON" | head -n 1)"
fi
ui_blank

ui_confirm "$(t backup_cron_disable_q)" n && {
    nv_backup_path "$CRON" backup-cron >/dev/null 2>&1 || true
    rm -f "$CRON"
    ui_ok "$(t backup_cron_disabled)"
    nv_trace backup-cron "disabled"
    exit 0
}

printf '  %s [03:30]: ' "$(t backup_cron_prompt_time)"
read -r when || exit 130
when=$(nv_trim "$when"); [ -z "$when" ] && when='03:30'
nv_valid_time "$when" || { ui_err "$(t backup_cron_bad_time)"; exit 2; }

hour=${when%%:*}
minute=${when##*:}
keep=$(nv_conf backup_keep_days 14)

nv_backup_path "$CRON" backup-cron >/dev/null 2>&1 || true
cat >"$CRON" <<EOF
# managed by nhanhvps -- regenerated on change
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
$minute $hour * * * root $SELF_CMD run backup/now >/dev/null 2>&1
EOF
chmod 0644 "$CRON"
nv_trace backup-cron "$when keep=${keep}d"

ui_ok "$(t backup_cron_enabled "$when")"
ui_info "$(t backup_cron_keep "$keep")"
exit 0
