# Maintainer: Gavin Luo <lunt.luo@gmail.com>

pkgbase=rime-wanxiang
pkgname=(rime-wanxiang-dict rime-wanxiang-pro-dict rime-wanxiang-data rime-wanxiang-pro-data)
pkgver=17.2.4
pkgrel=1
pkgdesc="万象拼音：词库基于AI筛选和语料辅助筛选精干高效，配合全新语法模型，输入不再纠结。"
arch=(any)
license=('CC-BY-4.0')

url="https://github.com/amzxyz/rime-wanxiang"
source=("${url}/archive/refs/tags/v${pkgver}.tar.gz"
        build.sh)
b2sums=('d620b3e96a105209e52202317dde6f9c161eb23b8339a88dd9fdb6fbddd9c41f4d2cc0bf5b19d4f068a9b7e52e078f85a1b04278fb1c53f325ef710077d23f1e'
        '1c101a06e52afabaa5a2619022644ad1093449897b5e03abda85d604c4c9a39fe23248e543ab62b9dcafc5ab829b8dc14d4acd22f509124d25648b5d3bab2f8a')

makedepends=("librime" "rime-prelude" "rime-essay" "python" "zip" "rsync" "luajit")

# 拼写方案
declare -A _schemas=(
    # 注释掉的为方案支持不完善
    [flypy]="小鹤双拼"
    [mspy]="微软双拼"
    [zrm]="自然码"
    [sogou]="搜狗双拼"
    [abc]="智能ABC"
    [ziguang]="紫光双拼"
    [pyjj]="拼音加加"
    # [gbpy]="国标双拼"
    # [lxsq]="乱序17"
    [pinyin]="全拼"
    # [wxsp]="万象双拼"
    # [zrlong]="自然龙"
    # [hxlong]="汉心龙"
)

# 辅助码类型
declare -A _fuzhus=(
  [shouyou]="首右"
  [zrm]="自然码"
  [tiger]="虎码首末"
  [moqi]="墨奇"
  [shyplus]="首右+"
  [flypy]="小鹤"
  [wx]="万象"
  [wubi]="五笔前2"
  [hanxin]="汉心"
)

eval "_build() {
    bash \"\${srcdir}/build.sh\" '$(declare -p _schemas | sed 's/declare -A _schemas=/declare -A schemas=/')'
}"

build() {
    cd "${srcdir}/rime-wanxiang-${pkgver}" || exit 1

    msg2 "release building..."
    bash .github/workflows/scripts/release-build.sh >/dev/null

    msg2 "schema building..."
    _build
}

check() {
    cd "${srcdir}/rime-wanxiang-${pkgver}" || exit 1
    while IFS= read -r -d '' _f; do
        msg2 "checking ${_f#./}..."
        luajit -b "$_f" /dev/null
    done < <(find ./lua -name '*.lua' ! -name 'librime.lua' -print0)
}

_package() {
    cd "${srcdir}"/dist/"${1//rime-wanxiang-/}" || exit 1
    find . -type f -exec install -Dm664 {} "${pkgdir}"/usr/share/rime-data/{} \;
}

package_rime-wanxiang-dict() {
    pkgdesc="万象拼音词库基础数据"
    replaces=("${pkgbase}-dict-zh")
    # shellcheck disable=SC2128
    _package "$pkgname"
}
package_rime-wanxiang-pro-dict() {
    pkgdesc="万象拼音双拼辅助码版词库基础数据"
    replaces=("${pkgbase}-dict-zh")
    conflicts=("$pkgbase-dict")
    # shellcheck disable=SC2128
    _package "$pkgname"
}

package_rime-wanxiang-data() {
    pkgdesc="万象拼音基础数据"
    depends=(librime rime-wanxiang-gram-zh-hans)
    # shellcheck disable=SC2128
    _package "$pkgname"
}
package_rime-wanxiang-pro-data() {
    pkgdesc="万象拼音双拼辅助码版基础数据"
    depends=(librime rime-wanxiang-gram-zh-hans)
    conflicts=("$pkgbase-data")
    # shellcheck disable=SC2128
    _package "$pkgname"
}

#
# ${pkgbase}-<schema>
# - ${pkgbase}-data
# - ${pkgbase}-dict-<schema>
#   - ${pkgbase}-dict
#
# ${pkgbase}-pro-<schema>
# - ${pkgbase}-pro-data
# - [${pkgbase}-pro-data-fuzhu]
#   - ${pkgbase}-pro-data-<fuzhu>-fuzhu
#     - ${pkgbase}-pro-dict-<fuzhu>-fuzhu
#       - ${pkgbase}-pro-dict
#
for _schema in "${!_schemas[@]}"; do
    _schema_name=${_schemas[$_schema]}

    # 基础版词库
    _pkgname=${pkgbase}-dict-${_schema} && pkgname+=("${_pkgname}")
    _conflicts=()
    for _schema_c in "${!_schemas[@]}"; do
        [[ "${_schema_c}" == "${_schema}" ]] && continue
        _conflicts+=("${pkgbase}-dict-${_schema_c}")
    done
    eval "package_${_pkgname}() {
        pkgdesc='万象拼音标准版词库（${_schema_name}方案）'
        depends=('${pkgbase}-dict=${pkgver}')
        conflicts=(${_conflicts[*]})
        _package ${_pkgname}
    }"

    # 基础版方案
    _pkgname=${pkgbase}-${_schema} && pkgname+=("${_pkgname}")
    _conflicts=()
    for _schema_c in "${!_schemas[@]}"; do
        [[ "${_schema_c}" == "${_schema}" ]] && continue
        _conflicts+=("${pkgbase}-${_schema_c}")
    done
    eval "package_${_pkgname}() {
        pkgdesc='万象拼音标准版（${_schema_name}方案）'
        depends=(sh ${pkgbase}-data '${pkgbase}-dict-${_schema}=${pkgver}')
        conflicts=(${_conflicts[*]})
        install='post.install'
        _package ${_pkgname}
    }"

    if [[ $_schema != "pinyin" ]]; then
        # PRO 版方案
        _pkgname=${pkgbase}-pro-${_schema} && pkgname+=("${_pkgname}")
        _conflicts=()
        for _schema_c in "${!_schemas[@]}"; do
            [[ "${_schema_c}" == "${_schema}" ]] && continue
            _conflicts+=("${pkgbase}-pro-${_schema_c}")
        done
        eval "package_${_pkgname}() {
            pkgdesc='万象拼音双拼辅助码版（${_schema_name}方案）'
            depends=(sh ${pkgbase}-pro-data '${pkgbase}-pro-data-fuzhu=${pkgver}')
            conflicts=(${_conflicts[*]})
            install='post.install'
            _package ${_pkgname}-zrm-fuzhu
        }"
    fi
done

for _fuzhu in "${!_fuzhus[@]}"; do
    _fuzhu_name=${_fuzhus[$_fuzhu]}

    # PRO 版词库
    _pkgname=${pkgbase}-pro-dict-${_fuzhu}-fuzhu && pkgname+=("${_pkgname}")
    _conflicts=()
    for _fuzhu_c in "${!_fuzhus[@]}"; do
        [[ "${_fuzhu_c}" == "${_schema}" ]] && continue
        _conflicts+=("${pkgbase}-dict-${_fuzhu_c}")
    done
    eval "package_${_pkgname}() {
        pkgdesc='万象拼音双拼辅助码词库（${_fuzhu_name}辅助）'
        depends=('${pkgbase}-pro-dict=${pkgver}')
        conflicts=(${_conflicts[*]})
        _package ${_pkgname}
    }"

    # PRO 版数据
    _pkgname=${pkgbase}-pro-data-${_fuzhu}-fuzhu && pkgname+=("${_pkgname}")
    _conflicts=()
    for _fuzhu_c in "${!_fuzhus[@]}"; do
        [[ "${_fuzhu_c}" == "${_schema}" ]] && continue
        _conflicts+=("${pkgbase}-pro-data-${_fuzhu_c}")
    done
    eval "package_${_pkgname}() {
        pkgdesc='万象拼音双拼辅助码版基础数据（${_fuzhu_name}辅助）'
        depends=('${pkgbase}-pro-dict-${_fuzhu}-fuzhu=${pkgver}')
        conflicts=(${_conflicts[*]})
        provides=('${pkgbase}-pro-data-fuzhu=${pkgver}')
        _package ${_pkgname}
    }"
done
