#!/bin/sh

################################################################################
# 公用常量和函数
################################################################################

# 定义类别目录
export SRC_DIR='sources'    # 未翻译
export TSL_DIR='translated' # 已翻译
export PUB_DIR='published'  # 已发布

# 定义匹配规则
export CATE_PATTERN='(talk|tech|news)'                 # 类别
export FILE_PATTERN='[0-9]{8} [a-zA-Z0-9_.,() -]*\.md' # 文件名

# 获取用于匹配操作的正则表达式
# 用法:get_operation_regex 状态 类型
#
# 状态为:
# - A:添加
# - M:修改
# - D:删除
# 类型为:
# - SRC:未翻译
# - TSL:已翻译
# - PUB:已发布
get_operation_regex() {
  STAT="$1"
  TYPE="$2"

  echo "^${STAT}\\s+\"?$(eval echo "\$${TYPE}_DIR")/"
}

# 确保两个变更文件一致
# 用法:ensure_identical X类型 X状态 Y类型 Y状态 是否仅比较文件名
#
# 状态为:
# - A:添加
# - M:修改
# - D:删除
# 类型为:
# - SRC:未翻译
# - TSL:已翻译
# - PUB:已发布
ensure_identical() {
  TYPE_X="$1"
  STAT_X="$2"
  TYPE_Y="$3"
  STAT_Y="$4"
  NAME_ONLY="$5"
  SUFFIX=
  [ -n "$NAME_ONLY" ] && SUFFIX="_basename"

  X_FILE="/tmp/changes_${TYPE_X}_${STAT_X}${SUFFIX}"
  Y_FILE="/tmp/changes_${TYPE_Y}_${STAT_Y}${SUFFIX}"

  cmp "$X_FILE" "$Y_FILE" 2> /dev/null
}

# 检查文章分类
# 用法:check_category 类型 状态
#
# 状态为:
# - A:添加
# - M:修改
# - D:删除
# 类型为:
# - SRC:未翻译
# - TSL:已翻译
check_category() {
  TYPE="$1"
  STAT="$2"

  CHANGES="/tmp/changes_${TYPE}_${STAT}"
  ! grep -Eqv "^${CATE_PATTERN}/" "$CHANGES"
}