getbranch(){
    local branch

    # Récupère le nom de la branche actuelle
    branch=$(git branch --show-current 2>/dev/null)
    if [[ -z "$branch" ]]; then
      msg_error "Pas dans un dépôt Git"
      exit
    fi

    echo $branch
}

gitreset(){
  local branch
  branch=$(getbranch)

  git fetch origin
  git reset --hard origin/"${1:-$branch}"
  git clean -fd

 msg_success "Dépôt synchronisé et nettoyé."
}

gitsync(){
  local branch
  branch=$(getbranch)

  git fetch
  git pull origin "${1:-$branch}"
}

gitclone(){

  if [[ -z "$1" ]]; then
    msg_warning "Veuillez préciser l'adresse d'un dépôt Git"
    return 1
  fi

  git init
  git remote add origin "$1"
  git fetch
  git reset --hard origin/main
  git clean -fd

  msg_success "Dépôt cloné."
}

giturl(){
  local branch
  branch=$(getbranch)

  git remote set-url origin "$1"

  msg_success "Url du dépôt changé en $1."
}

gitssl() {
  local choice="${1:-true}"
  git config --global http.sslVerify "$choice"
}

script_update() {
  local BRANCH LOCAL REMOTE current_path

  current_path="$PWD"

  cd "$WELCOME_SCRIPT_PATH" || return 2

  git fetch origin >/dev/null 2>&1
  if [ $? -ne 0 ]; then
    msg_error "Erreur lors du Fetch"
    cd "$current_path" || :
    return 3
  fi

  BRANCH=$(git rev-parse --abbrev-ref HEAD)
  LOCAL=$(git rev-parse HEAD)
  REMOTE=$(git rev-parse origin/"$BRANCH")

  if [ "$LOCAL" = "$REMOTE" ] && git diff --quiet && git diff --cached --quiet; then
    cd "$current_path" || :
    return 0
  fi

  # update
  echo ""
  git reset --hard origin/"$BRANCH"
  if [ $? -eq 0 ]; then
    msg_success "Les script de welcome a été mis à jour !! relancer le ssh pour profiter des nouvelles fonctionnalités"
    echo ""
    cd "$current_path" || :
    return 1
  else
    msg_error "Erreur lors de la mise à jour du script"
    cd "$current_path" || :
    return 4
  fi
}