#!/usr/bin/env bash

set -euo pipefail

if [ "$#" -ne 1 ]; then
  echo "사용법: ./qa_pdf.sh 문서.pdf" >&2
  exit 1
fi

BASE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PDF="$(realpath "$1")"
NAME="$(basename "$PDF" .pdf)"
PREVIEW_DIR="$BASE_DIR/preview/$NAME"

if [ ! -s "$PDF" ]; then
  echo "[FAIL] PDF 파일이 없거나 비어 있습니다: $PDF" >&2
  exit 1
fi

for COMMAND in pdfinfo pdffonts pdftotext pdftoppm; do
  if ! command -v "$COMMAND" >/dev/null 2>&1; then
    echo "[FAIL] 필요한 명령이 없습니다: $COMMAND" >&2
    echo "sudo apt install -y poppler-utils" >&2
    exit 1
  fi
done

mkdir -p "$PREVIEW_DIR"

echo "========================================"
echo "PDF 기본 정보"
echo "========================================"

PDF_INFO="$(pdfinfo "$PDF")"
echo "$PDF_INFO" | grep -E \
  "^(Title|Author|Pages|Page size|File size|PDF version):" \
  || true

PAGE_COUNT="$(
  echo "$PDF_INFO" |
  awk -F: '/^Pages:/ {gsub(/ /, "", $2); print $2}'
)"

if [ -z "${PAGE_COUNT:-}" ]; then
  echo "[FAIL] 페이지 수를 확인할 수 없습니다." >&2
  exit 1
fi

if [ "$PAGE_COUNT" -lt 1 ]; then
  echo "[FAIL] PDF 페이지가 없습니다." >&2
  exit 1
fi

echo
echo "========================================"
echo "PDF 글꼴 정보"
echo "========================================"

pdffonts "$PDF" | tee "$PREVIEW_DIR/fonts.txt"

if ! pdffonts "$PDF" |
  grep -Eqi "Nanum|NotoSansCJK|Noto Sans CJK|NotoSansKR"; then
  echo "[WARN] 권장 한글 글꼴이 확인되지 않았습니다."
fi

echo
echo "========================================"
echo "PDF 텍스트 추출"
echo "========================================"

pdftotext -layout "$PDF" "$PREVIEW_DIR/content.txt"

if [ ! -s "$PREVIEW_DIR/content.txt" ]; then
  echo "[FAIL] PDF에서 텍스트를 추출하지 못했습니다." >&2
  exit 1
fi

TEXT_SIZE="$(wc -c < "$PREVIEW_DIR/content.txt")"

if [ "$TEXT_SIZE" -lt 50 ]; then
  echo "[WARN] 추출된 텍스트가 지나치게 적습니다: ${TEXT_SIZE} bytes"
else
  echo "[PASS] 텍스트 추출 완료: ${TEXT_SIZE} bytes"
fi

echo
echo "========================================"
echo "페이지 미리보기 생성"
echo "========================================"

rm -f "$PREVIEW_DIR"/page-*.png

pdftoppm \
  -png \
  -r 120 \
  "$PDF" \
  "$PREVIEW_DIR/page" \
  >/dev/null

IMAGE_COUNT="$(
  find "$PREVIEW_DIR" \
    -maxdepth 1 \
    -name 'page-*.png' |
  wc -l
)"

if [ "$IMAGE_COUNT" -ne "$PAGE_COUNT" ]; then
  echo "[WARN] PDF 페이지 수와 미리보기 수가 다릅니다."
  echo "       PDF: ${PAGE_COUNT}페이지"
  echo "       이미지: ${IMAGE_COUNT}개"
else
  echo "[PASS] 전체 ${IMAGE_COUNT}페이지 미리보기 생성 완료"
fi

echo
echo "========================================"
echo "검수 결과"
echo "========================================"

echo "[PASS] PDF 기본 검수 완료"
echo "       PDF: $PDF"
echo "       페이지: $PAGE_COUNT"
echo "       미리보기: $PREVIEW_DIR"
echo "       추출 텍스트: $PREVIEW_DIR/content.txt"
echo "       글꼴 정보: $PREVIEW_DIR/fonts.txt"
