#!/usr/bin/env bash
# colordiff.sh — Colorize POSIX diff output.
# Usage:
#   colordiff.sh OLD_FILE NEW_FILE [-- <extra diff args>]
# Notes:
#   - 指示信息(位置信息/文件头/@@块/Index/Only in/diff行)：蓝色
#   - 旧文件行(以 "<" 开头)：黄色
#   - 新文件行(以 ">" 开头)：绿色
#   - 返回码与 diff 一致：0(无差异) 1(有差异) 2(错误)

set -euo pipefail

if [[ $# -lt 2 ]]; then
  echo "Usage: colordiff.sh OLD_FILE NEW_FILE [-- <extra diff args>]" >&2
  exit 2
fi

OLD=$1
NEW=$2
shift 2 || true

# ANSI colors
BLUE=$'\033[34m'
YELLOW=$'\033[33m'
GREEN=$'\033[32m'
RESET=$'\033[0m'

# 运行 diff 并着色。保留 diff 的退出码。
# 识别的“指示信息”包括：位置编辑指令、文件头、块头、以及常见前缀行。
diff "$@" -- "$OLD" "$NEW" | awk -v BLUE="$BLUE" -v YELLOW="$YELLOW" -v GREEN="$GREEN" -v RESET="$RESET" '
  # 指示信息：位置信息(形如 12a13,23 / 7c8 / 9d10)、文件头、块头、以及 diff/Index/Only in 开头
  $0 ~ /^([0-9]+(,[0-9]+)?[acd][0-9]+(,[0-9]+)?)/ { print BLUE $0 RESET; next }
  $0 ~ /^(--- |\+\+\+ |@@ |diff |Index: |Only in )/ { print BLUE $0 RESET; next }

  # 旧文件行与新文件行
  $0 ~ /^</ { print YELLOW $0 RESET; next }
  $0 ~ /^>/ { print GREEN $0 RESET; next }

  # 其他行保持原样
  { print $0 }
'

status=${PIPESTATUS[0]}
exit $status
