name: BotServer CI

on:
  push:
    branches: ["main"]
  pull_request:
    branches: ["main"]

env:
  CARGO_BUILD_JOBS: 4
  CARGO_NET_RETRY: 10

jobs:
  build:
    runs-on: gbo

    steps:
      - name: Disable SSL verification
        run: git config --global http.sslVerify false

      - name: Checkout BotServer Code
        uses: actions/checkout@v4
        with:
          path: botserver

      - name: Setup Workspace
        run: |
          git clone --depth 1 --branch main https://alm.pragmatismo.com.br/GeneralBots/gb.git workspace
          cd workspace
          git submodule update --init --depth 1 botlib
          git submodule update --init --depth 1 botui
          
          # Remove all members except botserver and botlib from workspace
          sed -i '/"botapp",/d' Cargo.toml
          sed -i '/"botdevice",/d' Cargo.toml
          sed -i '/"bottest",/d' Cargo.toml
          sed -i '/"botui",/d' Cargo.toml
          sed -i '/"botbook",/d' Cargo.toml
          sed -i '/"botmodels",/d' Cargo.toml
          sed -i '/"botplugin",/d' Cargo.toml
          sed -i '/"bottemplates",/d' Cargo.toml
          
          cd ..
          rm -rf workspace/botserver
          mv botserver workspace/botserver

      - name: Cache Busting
        run: |
          TS=$(date +%s)
          cd workspace/botui/ui/suite/chat
          mv chat.css chat.$TS.css
          mv chat.js chat.$TS.js
          sed -i "s/chat.css/chat.$TS.css/g" chat.html
          sed -i "s/chat.js/chat.$TS.js/g" chat.html

      - name: Install system dependencies
        run: |
          sudo apt-get update
          sudo apt-get install -y libpq-dev libssl-dev liblzma-dev pkg-config

      - name: Install Rust
        run: |
          curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain stable --profile minimal
          echo "$HOME/.cargo/bin" >> $GITHUB_PATH

      - name: Install sccache
        run: |
          wget https://github.com/mozilla/sccache/releases/download/v0.8.2/sccache-v0.8.2-x86_64-unknown-linux-musl.tar.gz
          tar xzf sccache-v0.8.2-x86_64-unknown-linux-musl.tar.gz
          mv sccache-v0.8.2-x86_64-unknown-linux-musl/sccache $HOME/.cargo/bin/sccache
          chmod +x $HOME/.cargo/bin/sccache
          echo "RUSTC_WRAPPER=sccache" >> $GITHUB_ENV
          $HOME/.cargo/bin/sccache --start-server || true

      - name: Setup environment
        run: sudo cp /opt/gbo/bin/system/.env . 2>/dev/null || true

      - name: Build BotServer
        working-directory: workspace
        run: |
          cargo build -p botserver -j 8 2>&1 | tee /tmp/build.log
          ls -lh target/debug/botserver
          sccache --show-stats || true

      - name: Save build log
        if: always()
        run: |
          sudo mkdir -p /opt/gbo/logs
          sudo cp /tmp/build.log /opt/gbo/logs/botserver-$(date +%Y%m%d-%H%M%S).log || true

      - name: Deploy
        working-directory: workspace
        run: |
          lxc exec bot:pragmatismo-system -- systemctl stop system || true
          
          # Deploy Binary
          sudo cp target/debug/botserver /opt/gbo/bin/system/
          sudo chmod +x /opt/gbo/bin/system/botserver
          
          # Deploy UI Assets (botui)
          sudo mkdir -p /opt/gbo/bin/system/botui/ui
          sudo cp -r botui/ui/suite /opt/gbo/bin/system/botui/ui/
          sudo cp -r botui/ui/themes /opt/gbo/bin/system/botui/ui/ || true
          
          lxc exec bot:pragmatismo-system -- systemctl start system || true
          