#!/bin/sh
# GitLab 服务器端 pre-receive hook —— laokehu 拜访报告必填门强制
# 说明：需要 GitLab 管理员权限启用；使用前先复制 validate_blob.py 到服务器固定路径并改 VALIDATOR。
# 版本：laokehu-project-kb

# 服务器上 validate_blob.py 的固定路径（管理员按需修改）
VALIDATOR=/opt/laokehu/validate_blob.py
PYTHON=${PYTHON:-python3}

RC=0
BAD_PATHS=""

while read old new ref; do
    [ -z "$new" ] && continue
    [ "$new" = "0000000000000000000000000000000000000000" ] && continue   # 删除引用
    if [ "$old" = "0000000000000000000000000000000000000000" ]; then
        RANGE=$(git rev-list "$new" 2>/dev/null | tail -1).."$new"
        [ "$RANGE" = "..$new" ] && RANGE="$new"
    else
        RANGE="$old..$new"
    fi
    CHANGED=$(git -c core.quotepath=false diff --name-only --diff-filter=ACMRT "$RANGE" 2>/dev/null)
    # 谁上传就属谁：以本次提交头部的作者名作为"拜访人"归属
    OWNER=$(git log -1 --format='%an' "$new" 2>/dev/null)
    for p in $CHANGED; do
        case "$p" in
            客户/*_拜访报告.md)
                if git show "$new:$p" 2>/dev/null | "$PYTHON" "$VALIDATOR" --path "$p" --name "$(basename "$p")" --owner "$OWNER" -; then
                    :
                else
                    echo "✗ [pre-receive] 不合规：$p" >&2
                    BAD_PATHS="$BAD_PATHS
$p"
                    RC=1
                fi
                ;;
        esac
    done
done

if [ "$RC" -ne 0 ]; then
    echo "" >&2
    echo "===== laokehu 提交被拒 =====" >&2
    echo "以下拜访报告未满足《必填门》格式要求，请按模板补全后再提交：" >&2
    printf '%s\n' "$BAD_PATHS" | sed '/^$/d' | sed 's/^/  - /' >&2
    echo "规则：五大必填节（项目背景/拜访事前准备/本次实际拜访结果/问题清单及下一步计划/其他补充）均须有实际内容；" >&2
    echo "命名：YYYY-MM-DD_客户名_帛丝人员_拜访报告.md，位于 客户/<客户名>/ 下。" >&2
    echo "署名：拜访人必须等于提交者本人（谁上传就属谁）。" >&2
    exit $RC
fi

exit 0
