# Maintainer: DeepChirp <deepchirp@archlinuxcn.org>
# Contributor: bbaa <bbaa@bbaa.moe>
# Contributor: cap153 <1536989047@qq.com>

_pkgname=EasyTier
pkgbase=easytier
pkgname=(${pkgbase} ${pkgbase}-core ${pkgbase}-cli ${pkgbase}-web)
pkgver=2.6.4
pkgrel=5
pkgdesc="A simple, decentralized mesh VPN with WireGuard support"
arch=('x86_64' 'aarch64' 'armv7h' 'loongarch64' 'riscv64' 'mipsel' 'mips64el')
url="https://easytier.cn/"
license=('LGPL-3.0-only')
depends=('glibc' 'libgcc' 'zstd')
makedepends=('cargo' 'protobuf' 'rust-bindgen' 'sqlite'
             'nodejs' 'pnpm') # for embeded web
options=("!lto") # https://gitlab.archlinux.org/archlinux/packaging/packages/pacman/-/issues/20
source=(
    "${_pkgname}-${pkgver}.tar.gz::https://github.com/EasyTier/EasyTier/archive/refs/tags/v${pkgver}.tar.gz"
    "0001-build-update-pnpm-config-for-v11-compatibility.patch"
    "easytier.service"
    "config.toml")
sha256sums=('352c0866da709415a837405a6ce4f51b8dfae27e5d5c1da1fb4d8f7338e46795'
            '70049779ad48f5257ecf36a5c92ed92c86e1f5f9e6a74650fe716ffb98a09803'
            'dd9e71f35055e2442187b630a6ff0c519d6f0bb5d0e206d0cb43e36759ab47fc'
            '05518beea8b047d5e9b9adb14f26f85a91e4eea81ead7eeb4743f8978e1fd842')

prepare() {
    cd "${_pkgname}-${pkgver}"

    # Fix `ERR_PNPM_LOCKFILE_CONFIG_MISMATCH` and `ERR_PNPM_IGNORED_BUILDS` on pnpm v11.0.0+.
    # https://github.com/EasyTier/EasyTier/pull/2322
    patch -Np1 -i "${srcdir}/0001-build-update-pnpm-config-for-v11-compatibility.patch"

    export PNPM_HOME="$srcdir/.pnpm-home"
    export npm_config_store_dir="$srcdir/.pnpm-store"
    pnpm -r install --frozen-lockfile

    export RUSTUP_TOOLCHAIN=stable

    cargo fetch --locked --target host-tuple
}

build() {
    cd "${_pkgname}-${pkgver}"

    export PNPM_HOME="$srcdir/.pnpm-home"
    export npm_config_store_dir="$srcdir/.pnpm-store"
    pnpm -r --filter "./easytier-web/*" build

    # Used for dynamic linking
    export LIBSQLITE3_SYS_USE_PKG_CONFIG=1
    export ZSTD_SYS_USE_PKG_CONFIG=1

    export RUSTUP_TOOLCHAIN=stable
    export CARGO_TARGET_DIR=target

    cargo build --frozen --release --features=embed

    install -d completions

    for shell in bash fish zsh nu elvish
    do
        ./target/release/easytier-core --gen-autocomplete "${shell}" > completions/core-"${shell}"
        ./target/release/easytier-cli gen-autocomplete "${shell}" > completions/cli-"${shell}"
    done
}

package_easytier() {
    depends=('easytier-core' 'easytier-cli' 'easytier-web')
}

package_easytier-core() {
    pkgdesc+=" - Core daemon"
    backup=('etc/easytier/config.toml')

    install -dm755 "${pkgdir}/var/lib/easytier"
    install -Dm644 "easytier.service" -t "${pkgdir}/usr/lib/systemd/system"
    install -Dm644 "config.toml" -t "${pkgdir}/etc/easytier"

    cd "${_pkgname}-${pkgver}"
    install -Dm755 "target/release/easytier-core" -t "${pkgdir}/usr/bin"

    install -Dm644 completions/core-bash "${pkgdir}/usr/share/bash-completion/completions/${pkgname}"
    install -Dm644 completions/core-fish "${pkgdir}/usr/share/fish/vendor_completions.d/$pkgname.fish"
    install -Dm644 completions/core-zsh "${pkgdir}/usr/share/zsh/site-functions/_${pkgname}"
    install -Dm644 completions/core-nu "${pkgdir}/usr/share/nushell/vendor/autoload/${pkgname}.nu"
    install -Dm644 completions/core-elvish "${pkgdir}/usr/share/elvish/lib/${pkgname}.elv"
}

package_easytier-cli() {
    pkgdesc+=" - Command-line interface"

    cd "${_pkgname}-${pkgver}"
    install -Dm755 "target/release/easytier-cli" -t "${pkgdir}/usr/bin"

    install -Dm644 completions/cli-bash "${pkgdir}/usr/share/bash-completion/completions/${pkgname}"
    install -Dm644 completions/cli-fish "${pkgdir}/usr/share/fish/vendor_completions.d/${pkgname}.fish"
    install -Dm644 completions/cli-zsh "${pkgdir}/usr/share/zsh/site-functions/_${pkgname}"
    install -Dm644 completions/cli-nu "${pkgdir}/usr/share/nushell/vendor/autoload/${pkgname}.nu"
    install -Dm644 completions/cli-elvish "${pkgdir}/usr/share/elvish/lib/${pkgname}.elv"
}

package_easytier-web() {
    pkgdesc+=" - Web management interface"
    depends+=('sqlite')

    cd "${_pkgname}-${pkgver}"
    install -Dm755 "target/release/easytier-web" -t "${pkgdir}/usr/bin"
}
