# Maintainer: Vianney Bouchaud <aur dot vianney at bouchaud dot org>

pkgname=bruno
pkgdesc="Opensource API Client for Exploring and Testing APIs"
pkgver=4.0.0
pkgrel=1
arch=('x86_64')
url="https://www.usebruno.com/"
license=('MIT')
_electron=electron37
depends=(
  "${_electron}"
  'alsa-lib'
)
makedepends=(
  'nvm'
  'python-setuptools'
  'python'
)

source=(
  "${pkgname}-${pkgver}.tar.gz::https://github.com/usebruno/bruno/archive/v${pkgver}.tar.gz"
  com.usebruno.app.Bruno.desktop
)

sha256sums=('61c536c22add27f325ac1de5134fb06182ad77653a24ef10f6b230aeda16b536'
  'e7267d33e2168f46942f57082a3c1c9afc46760038486c9cc9e9ff96d90fa841')

_ensure_local_nvm() {
  # lets be sure we are starting clean
  which nvm > /dev/null 2>&1 && nvm deactivate && nvm unload

  export NVM_DIR="${srcdir}/${pkgname}-${pkgver}/.nvm"
  # The init script returns 3 if version
  #   specified in ./.nvrc is not (yet) installed in $NVM_DIR
  #   but nvm itself still gets loaded ok
  source /usr/share/nvm/init-nvm.sh || [[ $? != 1 ]]
}

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

  nvm install

  export HUSKY=0
  npm install --cache "${srcdir}/npm-cache" --include dev
  npm install node-addon-api --save-dev --cache "${srcdir}/npm-cache"
}

build() {
  _ensure_local_nvm
  export NODE_ENV=production
  export NODE_OPTIONS=--openssl-legacy-provider

  cd "${pkgname}-${pkgver}"

  npm run sandbox:bundle-libraries --workspace=packages/bruno-js

  npm run build --workspace=packages/bruno-common
  npm run build --workspace=packages/bruno-requests
  npm run build --workspace=packages/bruno-converters
  npm run build --workspace=packages/bruno-query
  npm run build --workspace=packages/bruno-graphql-docs
  npm run build --workspace=packages/bruno-schema-types
  npm run build --workspace=packages/bruno-filestore
  npm run build --workspace=packages/bruno-app

  rm -rf packages/bruno-electron/{out,web}
  mkdir -p packages/bruno-electron/web
  cp -r packages/bruno-app/dist/* packages/bruno-electron/web

  sed -i -e 's@/static/@static/@g' packages/bruno-electron/web/**.html
  sed -i -e 's@/static/font@../../static/font@g' packages/bruno-electron/web/static/css/**.**.css

  find packages/bruno-electron/web -name '*.map' -type f -delete

  electronDist="/usr/lib/${_electron}"
  electronVer="$(cat ${electronDist}/version)"

  npm run pack --workspace=packages/bruno-electron -- \
    --linux \
    --x64 \
    --config electron-builder-config.js \
    -c.electronDist=${electronDist} \
    -c.electronVersion=${electronVer}
}

package() {
  install -Dm0644 com.usebruno.app.Bruno.desktop -t "${pkgdir}/usr/share/applications/"

  cd "${pkgname}-${pkgver}"

  install -Dm0755 /dev/null "${pkgdir}/usr/bin/${pkgname}"
  cat >> "${pkgdir}/usr/bin/${pkgname}" << EOD
#! /usr/bin/sh
ELECTRON_IS_DEV=0 exec ${_electron} /usr/lib/bruno "\$@"
EOD

  install -Dm0644 license.md "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
  install -d "${pkgdir}/usr/lib/${pkgname}/"
  npx --no asar e packages/bruno-electron/out/linux-unpacked/resources/app.asar "${pkgdir}/usr/lib/${pkgname}/"

  for i in 16 24 48 64 128 256 512 1024; do
    install -Dm644 "packages/bruno-electron/resources/icons/png/${i}x${i}.png" "${pkgdir}/usr/share/icons/hicolor/${i}x${i}/apps/com.usebruno.app.Bruno.png"
  done
}
