# Maintainer: DeepChirp <deepchirp@archlinuxcn.org>
# Contributor: Jonas Geiler <aur@jonasgeiler.com>
# Contributor: SoftExpert <softexpert at gmail dot com>

pkgname=yaak
_appid=app.yaak.Yaak
_appname=yaak-app-client
pkgver=2026.5.0
pkgrel=2
pkgdesc='A fast, secure, and offline API client'
arch=('x86_64' 'armv7h' 'aarch64')
url='https://yaak.app/'
license=('MIT')
depends=(
    # As reported by namcap
    bzip2
    cairo
    dbus
    fontconfig
    gdk-pixbuf2
    glib2
    glibc
    gtk3
    hicolor-icon-theme
    libgcc
    libgit2
    libsoup3
    libssh2
    openssl
    sqlite
    webkit2gtk-4.1
    xz
    zstd
    # Use system packages
    nodejs
    protobuf
)
makedepends=(
    appmenu-gtk-module   # Tauri
    cargo                # Rust dependencies & Tauri build
    git                  # Web build
    imagemagick          # Icon
    libappindicator-gtk3 # Tauri
    librsvg              # Tauri
    npm                  # Node dependencies & web build
    rust-wasm            # Yaak
    wasm-pack            # Yaak
)
options=("!lto") # https://gitlab.archlinux.org/archlinux/packaging/packages/pacman/-/issues/20
provides=("yaak-app" "yaak-app-client")
source=("${pkgname}-${pkgver}.tar.gz::https://github.com/mountain-loop/yaak/archive/refs/tags/v${pkgver}.tar.gz"
        "${_appid}.desktop")
sha256sums=('a3e4e08716093f96c0f8c97c3b50bbdcfb5ccceaa93f908e1b9dfc5663090b1a'
            '228dc02b9ffecef06195e67d5d7d70b1fd64546682ced382cb448f35039997f8')

_setup_env() {
    export YAAK_VERSION="${pkgver}"
    export CI=true

    # Used for dynamic linking
    export LIBGIT2_NO_VENDOR=1
    export LIBSQLITE3_SYS_USE_PKG_CONFIG=1
    export LIBSSH2_SYS_USE_PKG_CONFIG=1
    export OPENSSL_NO_VENDOR=1
    export ZSTD_SYS_USE_PKG_CONFIG=1

    export RUSTUP_TOOLCHAIN=stable
    export CARGO_TARGET_DIR=target

    export CARGO_PROFILE_RELEASE_LTO=true
    export CARGO_PROFILE_RELEASE_CODEGEN_UNITS=1
}

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

    # Avoid downloading Node.js and Protoc
    echo "console.log('Skipped NodeJS download for Arch Linux');" > scripts/vendor-node.cjs
    mkdir -p crates-tauri/${_appname}/vendored/node
    touch crates-tauri/${_appname}/vendored/node/yaaknode

    echo "console.log('Skipped Protoc download for Arch Linux');" > scripts/vendor-protoc.cjs
    mkdir -p crates-tauri/${_appname}/vendored/protoc
    touch crates-tauri/${_appname}/vendored/protoc/yaakprotoc
    mkdir -p crates-tauri/${_appname}/vendored/protoc/include/google
    ln -sf "/usr/include/google/protobuf" "crates-tauri/${_appname}/vendored/protoc/include/google/protobuf"

    npm ci
}

build() {
    cd "${pkgname}-${pkgver}"
    _setup_env

    npm run replace-version
    pushd crates-tauri/${_appname}
    npx tauri build
    popd

    local icon_src="crates-tauri/${_appname}/icons/icon.png"
    mkdir -p "${srcdir}/icons-build"
    for res in 16 24 32 48 64 128 256 512 1024; do
        magick "${icon_src}" -resize "${res}x${res}" "${srcdir}/icons-build/${_appname}-${res}.png"
    done
}

check() {
    cd "${pkgname}-${pkgver}"
    _setup_env

    npm test
    cargo test --frozen -p ${_appname} --features wry
}

package() {
    cd "${pkgname}-${pkgver}"

    install -Dm755 "crates-tauri/${_appname}/target/release/${_appname}" -t "${pkgdir}/usr/bin"

    mkdir -p "${pkgdir}/usr/lib/${pkgname}/"
    cp -r "crates-tauri/${_appname}/static" "${pkgdir}/usr/lib/${pkgname}/"

    mkdir -p "${pkgdir}/usr/lib/${pkgname}/vendored"
    cp -r "crates-tauri/${_appname}/vendored/plugins" "${pkgdir}/usr/lib/${pkgname}/vendored/"
    cp -r "crates-tauri/${_appname}/vendored/plugin-runtime" "${pkgdir}/usr/lib/${pkgname}/vendored/"

    mkdir -p "${pkgdir}/usr/lib/${pkgname}/vendored/node"
    ln -sf "/usr/bin/node" "${pkgdir}/usr/lib/${pkgname}/vendored/node/yaaknode"

    mkdir -p "${pkgdir}/usr/lib/${pkgname}/vendored/protoc/include/google"
    ln -sf "/usr/bin/protoc" "${pkgdir}/usr/lib/${pkgname}/vendored/protoc/yaakprotoc"
    ln -sf "/usr/include/google/protobuf" "${pkgdir}/usr/lib/${pkgname}/vendored/protoc/include/google/protobuf"

    for res in 16 24 32 48 64 128 256 512 1024; do
        local target_dir="${pkgdir}/usr/share/icons/hicolor/${res}x${res}/apps"
        install -Dm644 "${srcdir}/icons-build/${_appname}-${res}.png" "${target_dir}/${_appname}.png"
    done

    install -Dm644 "flatpak/${_appid}.metainfo.xml" -t "${pkgdir}/usr/share/metainfo"

    install -Dm644 "${srcdir}/${_appid}.desktop" -t "${pkgdir}/usr/share/applications"

    install -Dm644 "LICENSE" -t "${pkgdir}/usr/share/licenses/${pkgname}"
}
