# shellcheck shell=dash

# Backup / restore dispatcher.
#
#   x dns backup <name>     save current DNS state to
#                           $___X_CMD_ROOT_DATA/dns/backup/<name>.json
#   x dns restore <name>    apply DNS from a previous backup
#
# Per-OS implementations live in lib/backup/{linux,darwin,win}.

xrc:mod:lib     dns     backup/linux backup/darwin backup/win

# x dns backup <name>
___x_cmd_dns_backup(){
    [ $# -gt 0 ] || {
        N=dns M="Usage: x dns backup <name>" log:ret:64
    }

    case "$1" in
        -h|--help)  ___x_cmd help -m dns backup; return 0 ;;
    esac

    local name="$1"; shift

    local x_
    ___x_cmd os name_
    case "$x_" in
        linux)      ___x_cmd_dns_backup___linux  "$name" ;;
        darwin)     ___x_cmd_dns_backup___darwin "$name" ;;
        win)        ___x_cmd_dns_backup___win    "$name" ;;
        *)          N=dns M="Unsupported os ==> $x_" log:ret:64 ;;
    esac
}

# x dns restore <name>
___x_cmd_dns_restore(){
    [ $# -gt 0 ] || {
        N=dns M="Usage: x dns restore <name>" log:ret:64
    }

    case "$1" in
        -h|--help)  ___x_cmd help -m dns restore; return 0 ;;
    esac

    local name="$1"; shift

    local x_
    ___x_cmd os name_
    case "$x_" in
        linux)      ___x_cmd_dns_restore___linux  "$name" ;;
        darwin)     ___x_cmd_dns_restore___darwin "$name" ;;
        win)        ___x_cmd_dns_restore___win    "$name" ;;
        *)          N=dns M="Unsupported os ==> $x_" log:ret:64 ;;
    esac
}

# Shared helper: where backups are stored. Keeps the path in one place.
___x_cmd_dns_backup___dir(){
    printf '%s\n' "$___X_CMD_ROOT_DATA/dns/backup"
}
