#!/bin/sh
# laokehu-project-kb 拜访报告必填门前置校验 hook
# 由 initialize-hooks 配置 core.hooksPath=hooks 后生效。
# 作用：push 前校验本次推送涉及的拜访报告是否合法；任一不合规则拒绝推送。

RC=0
ROOT=$(git rev-parse --show-toplevel) || exit 1
VALIDATOR="$ROOT/_validation/validate_report.py"

# 收集本次推送涉及的 .md 报告文件
REPORTS=""

while read local_ref local_sha remote_ref remote_sha; do
    [ -z "$local_sha" ] && continue
    if [ "$remote_sha" = "0000000000000000000000000000000000000000" ]; then
        # 新分支/首次推送：退化为与本地默认分支的合并基点
        BASE=$(git merge-base "$local_sha" origin/master 2>/dev/null || echo "$local_sha")
        RANGE="$BASE..$local_sha"
    else
        RANGE="$remote_sha..$local_sha"
    fi
    CHANGED=$(git -c core.quotepath=false diff --name-only --diff-filter=ACMRT "$RANGE" 2>/dev/null)
    for f in $CHANGED; do
        case "$f" in
            客户/*_拜访报告.md) REPORTS="$REPORTS
$f" ;;
        esac
    done
done

# 去重
REPORTS=$(printf '%s\n' "$REPORTS" | sort -u | sed '/^$/d')

if [ -z "$REPORTS" ]; then
    exit 0
fi

echo "laokehu 校验：本次推送涉及 $(printf '%s\n' "$REPORTS" | sed '/^$/d' | wc -l | tr -d ' ') 份拜访报告，正在校验…"

for f in $REPORTS; do
    if python "$VALIDATOR" "$ROOT/$f" >/dev/null 2>&1; then
        :
    else
        echo "✗ 不合规：$f"
        RC=1
    fi
done

if [ "$RC" -ne 0 ]; then
    echo ""
    echo "提交被拒：有拜访报告未满足《必填门》格式要求，请按模板补全后再推送。"
    echo "  - 五必备节：一、项目背景 ｜ 二、拜访事前准备 ｜ 三、本次实际拜访结果 ｜ 四、问题清单及下一步计划 ｜ 五、其他补充"
    echo "  - 命名：YYYY-MM-DD_客户名_帛丝人员_拜访报告.md（放置于 客户/<客户名>/ 下）"
fi
exit $RC
