name: Dusk Tests

on:
  push:
  pull_request:

jobs:
  dusk:
    runs-on: ubuntu-latest

    env:
      SERVICE_NAME: COLOCAR-NOME-DO-SISTEMA-USADO-NO-DOCKER-COMPOSE

    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Create .env
        run: cp .env.example .env

      - name: Add auth.local to hosts to senhaunica-faker works properly
        run: |
          echo "127.0.0.1 auth.local" | sudo tee -a /etc/hosts

      - name: Set UID/GID
        run: |
          echo "UID=$(id -u)" >> $GITHUB_ENV
          echo "GID=$(id -g)" >> $GITHUB_ENV

      - name: Build and start containers
        run: docker compose up -d --build

      - name: Wait for MariaDB
        run: |
          for i in {1..40}; do
            if docker compose exec -T mariadb mariadb -u${{ env.SERVICE_NAME }} -p${{ env.SERVICE_NAME }} -e "SELECT 1;" &> /dev/null; then
              echo "MariaDB is ready"
              exit 0
            fi
            echo "Waiting for MariaDB..."
            sleep 2
          done

      - name: Install Composer dependencies
        run: docker compose exec -T ${{ env.SERVICE_NAME }} composer install --no-interaction --prefer-dist

      - name: Generate APP_KEY
        run: docker compose exec -T ${{ env.SERVICE_NAME }} php artisan key:generate

      - name: Run migrations
        run: docker compose exec -T ${{ env.SERVICE_NAME }} php artisan migrate --force

      - name: Install ChromeDriver
        run: docker compose exec -T ${{ env.SERVICE_NAME }} php artisan dusk:chrome-driver --detect

      - name: Run Dusk
        run: docker compose exec -T ${{ env.SERVICE_NAME }} php artisan dusk --without-tty

      - name: Show logs on failure
        if: failure()
        run: docker compose logs

      - name: Stop containers
        if: always()
        run: docker compose down -v
