#!/usr/bin/env bash
echo "git $*" >> "${GIT_CALLS_FILE:-/dev/null}"

[ -z "${GIT_MOCK_FAIL:-}" ] || { echo "git: mock forced failure" >&2; exit 1; }

if [ "${1:-}" = "push" ] && [ -n "${GIT_MOCK_FAIL_PUSH:-}" ]; then
  echo "git: mock push failure" >&2
  exit 1
fi

# Skip -c config arguments
while [ "${1:-}" = "-c" ]; do
  shift 2
done

case "$1" in
  clone)
    TARGET_DIR="${@: -1}"
    mkdir -p "${TARGET_DIR}/$(dirname "$INPUT_FILE")"
    echo 'version: 0.1.0' > "${TARGET_DIR}/${INPUT_FILE}"
    echo "Cloning into '$TARGET_DIR'..."
    ;;
  add|commit|push|config|init)
    ;;
  diff)
    # Default: exit 1 = has changes → proceed to commit
    # GIT_MOCK_DIFF_NO_CHANGES=1 → exit 0 = no changes → "no change" path
    if [ -n "${GIT_MOCK_DIFF_NO_CHANGES:-}" ]; then
      exit 0
    fi
    exit 1
    ;;
  rev-parse)
    echo "mock-sha-9876543210fedcba9876543210fedcba98765432"
    ;;
  *)
    echo "git: unknown command: $*" >&2
    exit 1
    ;;
esac
