#!/bin/sh

apply_dotfiles() {
  if [ -z "$DOTFILES_REPO" ]; then
    return 0
  fi

  DOTFILES_TMP=$(mktemp -d)
  CLONE_URL="$DOTFILES_REPO"
  if [ -n "$DOTFILES_TOKEN" ]; then
    CLONE_URL=$(echo "$DOTFILES_REPO" | sed "s|https://|https://${DOTFILES_TOKEN}@|")
  fi
  echo "[INFO] cloning dotfiles from $DOTFILES_REPO"
  git clone --depth 1 --recurse-submodules --shallow-submodules "$CLONE_URL" "$DOTFILES_TMP" 2>&1 || { echo "[WARN] dotfiles clone failed"; rm -rf "$DOTFILES_TMP"; return 1; }

  if [ -d "$DOTFILES_TMP/.config" ]; then
    cp -r "$DOTFILES_TMP/.config" "$HOME/"
    echo "[INFO] dotfiles .config applied"
  fi

  for f in "$DOTFILES_TMP"/dot_*; do
    [ -e "$f" ] || continue
    name=$(basename "$f" | sed 's/^dot_/\./')
    cp -r "$f" "$HOME/$name"
    echo "[INFO] dotfiles: $name"
  done

  rm -rf "$DOTFILES_TMP"

  find "$HOME" -maxdepth 8 \( -name 'executable_*' -o -name 'dot_*' -o -name 'readonly_*' -o -name 'empty_*' \) 2>/dev/null | while read -r chezmoi_file; do
    dir=$(dirname "$chezmoi_file")
    base=$(basename "$chezmoi_file")
    newname=$(echo "$base" | sed -e 's/^executable_//' -e 's/^readonly_//' -e 's/^empty_//' -e 's/^dot_/./')
    [ "$base" = "$newname" ] && continue
    target="$dir/$newname"
    [ -e "$target" ] && continue
    cp -r "$chezmoi_file" "$target"
    case "$base" in executable_*) chmod +x "$target" ;; esac
  done
}

# Allow both sourcing and direct execution
if [ "${0##*/}" = "dotfiles-apply.sh" ]; then
  set -e
  apply_dotfiles
fi
