#!/usr/bin/env bash
# Wire up the project-wide dotfiles:
#   - symlink docs/setup/dotfiles/aliases.zsh → ~/.oh-my-zsh/custom/aliases.zsh
#   - copy docs/setup/dotfiles/gitconfig.txt to ~/.gitconfig and overlay your identity
set -euo pipefail
# shellcheck source=./lib.sh
source "$(cd "$(dirname "$0")" && pwd)/lib.sh"
require_debian
require_not_root

REPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || true)"
if [[ -z "$REPO_ROOT" ]]; then
  err "Run from inside a git checkout of apf_portal."
  exit 1
fi

DOTFILES_DIR="$REPO_ROOT/docs/setup/dotfiles"

# ─── 1. Aliases ───────────────────────────────────────────────────────
SOURCE_ALIASES="$DOTFILES_DIR/aliases.zsh"
if [[ ! -f "$SOURCE_ALIASES" ]]; then
  err "$SOURCE_ALIASES not found."
  exit 1
fi

OMZ_CUSTOM="${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}"
if [[ ! -d "$OMZ_CUSTOM" ]]; then
  err "$OMZ_CUSTOM not found — run 20-zsh.sh first."
  exit 1
fi

TARGET_ALIASES="$OMZ_CUSTOM/aliases.zsh"
if [[ -L "$TARGET_ALIASES" \
      && "$(readlink -f "$TARGET_ALIASES")" == "$(readlink -f "$SOURCE_ALIASES")" ]]; then
  skip "aliases.zsh symlink already correct."
else
  if [[ -e "$TARGET_ALIASES" || -L "$TARGET_ALIASES" ]]; then
    backup="$TARGET_ALIASES.bak.$(date +%s)"
    mv "$TARGET_ALIASES" "$backup"
    warn "Existing $TARGET_ALIASES backed up to $backup."
  fi
  ln -s "$SOURCE_ALIASES" "$TARGET_ALIASES"
  ok "Linked $TARGET_ALIASES → $SOURCE_ALIASES."
fi

# ─── 2. gitconfig — copy + identity overlay ───────────────────────────
SOURCE_GITCONFIG="$DOTFILES_DIR/gitconfig.txt"
if [[ ! -f "$SOURCE_GITCONFIG" ]]; then
  err "$SOURCE_GITCONFIG not found."
  exit 1
fi

TARGET_GITCONFIG="$HOME/.gitconfig"
if [[ -f "$TARGET_GITCONFIG" ]] && ! confirm "$TARGET_GITCONFIG exists — overwrite (existing backed up)?"; then
  skip "Keeping existing $TARGET_GITCONFIG."
else
  if [[ -f "$TARGET_GITCONFIG" ]]; then
    cp "$TARGET_GITCONFIG" "$TARGET_GITCONFIG.bak.$(date +%s)"
  fi

  # Prompt for identity. Defaults: pre-existing config values, else blank.
  current_name="$(git config --global user.name 2>/dev/null || true)"
  current_email="$(git config --global user.email 2>/dev/null || true)"
  read -r -p "Git user.name [${current_name:-<required>}]: " new_name
  new_name="${new_name:-$current_name}"
  read -r -p "Git user.email [${current_email:-<required>}]: " new_email
  new_email="${new_email:-$current_email}"
  if [[ -z "$new_name" || -z "$new_email" ]]; then
    err "Both user.name and user.email are required."
    exit 1
  fi

  cp "$SOURCE_GITCONFIG" "$TARGET_GITCONFIG"
  # `git config --global` finds and rewrites the [user] section
  # cleanly even when the source carries a different identity.
  git config --global user.name "$new_name"
  git config --global user.email "$new_email"

  ok "Wrote $TARGET_GITCONFIG with identity $new_name <$new_email>."
fi
