#!/usr/bin/env bash

set -euo pipefail

# 이 스크립트는 결재 문서를 백엔드(superport_api_v2)와 동기화하거나 차이를 점검한다.

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
BACKEND_ROOT="$(cd "$PROJECT_ROOT/.." && pwd)/superport_api_v2"

FILES=(
  "stock_approval_system_api_v4.md"
  "stock_approval_system_spec_v4.md"
)

show_usage() {
  cat <<'EOF'
사용법: tool/sync_stock_docs.sh [--check]

  --check   백엔드 문서와 현재 문서의 차이를 검사한다.
           차이가 있으면 diff를 출력하고 종료 코드 1을 반환한다.

인자가 없으면 백엔드 문서를 복사하여 현재 리포지터리 doc/ 경로로 동기화한다.
EOF
}

require_files() {
  local missing=0
  for file in "${FILES[@]}"; do
    local source_path="$BACKEND_ROOT/$file"
    if [[ ! -f "$source_path" ]]; then
      echo "오류: 백엔드 문서를 찾을 수 없습니다 -> $source_path" >&2
      missing=1
    fi
  done

  if [[ $missing -ne 0 ]]; then
    exit 1
  fi
}

sync_files() {
  require_files
  for file in "${FILES[@]}"; do
    local source_path="$BACKEND_ROOT/$file"
    local target_path="$PROJECT_ROOT/doc/$file"
    mkdir -p "$(dirname "$target_path")"
    cp "$source_path" "$target_path"
    echo "동기화 완료: $file"
  done
}

check_diff() {
  require_files
  local diff_found=0
  for file in "${FILES[@]}"; do
    local source_path="$BACKEND_ROOT/$file"
    local target_path="$PROJECT_ROOT/doc/$file"
    if ! diff -u "$target_path" "$source_path" >/dev/null; then
      echo "차이 발견: $file"
      diff -u "$target_path" "$source_path" || true
      diff_found=1
    fi
  done

  if [[ $diff_found -ne 0 ]]; then
    exit 1
  fi
  echo "모든 문서가 일치합니다."
}

main() {
  if [[ $# -gt 1 ]]; then
    show_usage
    exit 1
  fi

  if [[ $# -eq 1 ]]; then
    case "$1" in
      --check)
        check_diff
        return
        ;;
      -*)
        show_usage
        exit 1
        ;;
      *)
        show_usage
        exit 1
        ;;
    esac
  fi

  sync_files
}

main "$@"
