#!/usr/bin/env bash

set -euo pipefail
IFS=$'\n\t'

readonly SCRIPT_NAME="${0##*/}"
readonly FONT_BASE_DIR="$HOME/.local/share/fonts"
readonly TMP_DIR="$(mktemp -d)"

log()  { printf '\033[1;34m[%s]\033[0m %s\n' "${SCRIPT_NAME%.sh}" "$*"; }
warn() { printf '\033[1;33m[%s] WARN:\033[0m %s\n' "${SCRIPT_NAME%.sh}" "$*" >&2; }
die()  { printf '\033[1;31m[%s] ERROR:\033[0m %s\n' "${SCRIPT_NAME%.sh}" "$*" >&2; exit 1; }

cleanup() {
  rm -rf "$TMP_DIR"
}
trap cleanup EXIT

if (( EUID == 0 )); then
  die "Do not run as root. Run as your normal desktop user so fonts install under $HOME."
fi

for tool in curl unzip fc-cache find; do
  command -v "$tool" >/dev/null 2>&1 || die "Missing required tool: $tool"
done

latest_nerd_font_url() {
  local asset_name="$1"
  local url

  url="$(
    curl -fsSL https://api.github.com/repos/ryanoasis/nerd-fonts/releases/latest \
      | grep "browser_download_url.*${asset_name}" \
      | cut -d '"' -f 4 \
      | head -n 1 \
      || true
  )"

  [[ -n "$url" ]] || die "Could not find download URL for $asset_name. Check connectivity or GitHub API limits."
  printf '%s' "$url"
}

install_nerd_font() {
  local display_name="$1"
  local asset_name="$2"
  local font_dir="$3"
  local download_url="$4"
  local zip_path="$TMP_DIR/${asset_name}.zip"
  local extract_dir="$TMP_DIR/${asset_name}"
  local installed_count

  if [[ -z "$download_url" ]]; then
    log "Finding latest $display_name release..."
    download_url="$(latest_nerd_font_url "${asset_name}.zip")"
  fi

  log "Downloading $display_name..."
  curl -fL --retry 3 --retry-delay 2 -o "$zip_path" "$download_url"

  log "Extracting $display_name..."
  mkdir -p "$extract_dir" "$font_dir"
  unzip -q -o "$zip_path" -d "$extract_dir"

  installed_count="$(
    find "$extract_dir" -type f \( -name '*.ttf' -o -name '*.otf' \) \
      -exec cp {} "$font_dir/" \; \
      -printf '.' \
      | wc -c
  )"

  [[ "$installed_count" -gt 0 ]] || die "No font files found in ${asset_name}.zip"
  find "$font_dir" -type f \( -name '*.ttf' -o -name '*.otf' \) -exec chmod 0644 {} +
  log "Installed $installed_count font files to $font_dir"
}

mkdir -p "$FONT_BASE_DIR"

install_nerd_font \
  "Ubuntu Sans Nerd Font" \
  "UbuntuSans" \
  "$FONT_BASE_DIR/UbuntuSans" \
  ""

install_nerd_font \
  "JetBrains Mono Nerd Font" \
  "JetBrainsMono" \
  "$FONT_BASE_DIR/JetBrainsMonoNerdFont" \
  ""

log "Updating font cache..."
fc-cache -f "$FONT_BASE_DIR"

if command -v fc-match >/dev/null 2>&1; then
  log "Resolved terminal font: $(fc-match 'JetBrainsMono Nerd Font Mono')"
fi

log "Done. Configure your terminal to use JetBrainsMono Nerd Font Mono for Starship Powerline symbols."
