#!/usr/bin/env bash
# okpyeon 데이터 재생성 스크립트.
# libhangul 저장소의 고정 커밋에서 hanja.txt / mssymbol.txt 를 받아
# data/ 에 벤더링한다. hanja.txt 는 단일 글자 키 항목만 남긴다
# (다음절 한자어 표제어 제거). mssymbol.txt 는 원본 그대로.
#
# 사용법: scripts/update-data.sh [커밋해시]
set -euo pipefail
export LC_ALL=C.UTF-8

COMMIT="${1:-a34aef73378c0992316861bbf13fc914ee7577d9}"
BASE="https://raw.githubusercontent.com/libhangul/libhangul/${COMMIT}/data/hanja"
DEST="$(cd "$(dirname "$0")/.." && pwd)/data"

# awk length()가 바이트가 아니라 글자 수를 세는지 확인한다.
# (mawk/BSD awk, 또는 C.UTF-8 로케일이 없는 gawk에서는 3이 나와
#  모든 한글 행이 탈락한 빈 데이터를 조용히 만들게 된다.)
if [ "$(awk 'BEGIN{print length("가")}')" != 1 ]; then
    echo "error: awk length() counts bytes, not characters." >&2
    echo "       gawk with a UTF-8 locale is required." >&2
    exit 1
fi

tmp="$(mktemp -d)"
trap 'rm -rf "$tmp"' EXIT

curl -fsSL "${BASE}/hanja.txt" -o "$tmp/hanja.txt"
curl -fsSL "${BASE}/mssymbol.txt" -o "$tmp/mssymbol.txt"

# 헤더(선두 주석 블록)는 라이선스 고지이므로 유지하고, 수정 고지를 덧붙인 뒤
# 키와 값이 각각 정확히 한 글자인 데이터 행만 남긴다.
# (다음절 표제어 제거 + 값이 두 글자 이상인 지명 이상 항목 2건 제거)
awk -F: -v commit="$COMMIT" '
    BEGIN { in_header = 1 }
    in_header && /^#/ { print; next }
    in_header {
        in_header = 0
        print "#"
        print "# Modified for the okpyeon crate: only entries whose key and value are"
        print "# each a single character are retained (multi-syllable word entries and"
        print "# multi-character values removed)."
        print "# Source: https://github.com/libhangul/libhangul"
        print "#         data/hanja/hanja.txt @ " commit
    }
    /^#/ || /^[[:space:]]*$/ { next }
    length($1) == 1 && length($2) == 1 { print }
' "$tmp/hanja.txt" > "$DEST/hanja.txt"

cp "$tmp/mssymbol.txt" "$DEST/mssymbol.txt"

count_entries() { grep -v '^#' "$1" | grep -c .; }
hanja_count="$(count_entries "$DEST/hanja.txt")"
mssymbol_count="$(count_entries "$DEST/mssymbol.txt")"
echo "hanja.txt:    $hanja_count entries"
echo "mssymbol.txt: $mssymbol_count entries"
if [ "$hanja_count" -lt 20000 ] || [ "$mssymbol_count" -lt 900 ]; then
    echo "error: entry count implausibly low; refusing to keep the result" >&2
    exit 1
fi
