#!/bin/zsh

### Remove a cloned bundle.
#
# usage: antidote purge [-h|--help] <bundle>
#        antidote purge [-a|--all]
#
#function antidote-purge {
  emulate -L zsh; setopt local_options $_adote_funcopts

  local o_help o_all
  zparseopts $_adote_zparopt_flags -- \
    h=o_help -help=h \
    a=o_all  -all=a  ||
    return 1

  if (( $#o_help )); then
    antidote-help purge
    return
  fi

  if [[ $# -eq 0 ]] && ! (( $#o_all )); then
    print -ru2 "antidote: error: required argument 'bundle' not provided, try --help"
    return 1
  fi

  local bundlefile
  zstyle -s ':antidote:bundle' file 'bundlefile' ||
    bundlefile=${ZDOTDIR:-$HOME}/.zsh_plugins.txt

  if (( $#o_all )); then
    # last chance to save the user from themselves
    local antidote_home="$(antidote-home)"
    local REPLY
    zstyle -s ':antidote:purge:all' answer 'REPLY' || {
      read -q "REPLY?You are about to permanently remove '$antidote_home' and all its contents!"$'\n'"Are you sure [Y/n]? "
      print
    }
    [[ ${REPLY:u} == "Y" ]] || return 1
    # remove antidote home and static cache file
    __antidote_del -rf -- "$antidote_home"

    if [[ -e "${bundlefile:r}.zsh" ]]; then
      zstyle -s ':antidote:purge:all' answer 'REPLY' || {
        read -q "REPLY?You are about to remove '${bundlefile:t:r}.zsh'"$'\n'"Are you sure [Y/n]? "
        print
      }
      if [[ ${REPLY:u} == "Y" ]]; then
        local dtstmp=$(date -u '+%Y%m%d_%H%M%S')
        command mv -f "${bundlefile:r}.zsh" "${bundlefile:r}.${dtstmp}.bak"
        print "'"${bundlefile:r}.zsh"' backed up to '${bundlefile:t:r}.${dtstmp}.bak'"
      fi
    fi
    print "Antidote purge complete. Be sure to start a new Zsh session."

  else
    local bundle=$1
    # make sure the user isn't trying to do something out-of-bounds
    if [[ -e "$bundle" ]]; then
      print -ru2 "antidote: error: '$bundle' is not a repo and cannot be removed by antidote."
      return 2
    fi

    local bundledir=$(__antidote_bundle_dir $bundle)
    if [[ ! -d "$bundledir" ]]; then
      print -ru2 "antidote: error: $bundle does not exist at the expected location: $bundledir"
      return 1
    fi

    # remove
    __antidote_del -rf "$bundledir"
    print "Removed '$bundle'."

    # attempt to comment out the bundle from .zsh_plugins.txt
    if [[ -e "$bundlefile" ]]; then
      local tmpfile="${bundlefile}.antidote.tmp"
      $__adote_awkcmd -v pat="$bundle" '$0~"^[[:blank:]]*"pat{print "# " $0;next}1' <$bundlefile >|$tmpfile
      command cat "$tmpfile" > "$bundlefile"
      __antidote_del -f "$tmpfile"
      print "Bundle '$bundle' was commented out in '$bundlefile'."
    fi
  fi
#}
