name: Deploy to Foundry Server

on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          fetch-depth: 0  # Full history for tag counting

      # Generate CalVer: YYYY.MM.BUILD
      # BUILD = count of tags matching current month + 1
      - name: Generate CalVer version
        id: meta
        run: |
          YEAR=$(date -u +%Y)
          MONTH=$(date -u +%-m)
          PREFIX="${YEAR}.${MONTH}."

          git fetch --tags
          BUILD=$(git tag -l "${PREFIX}*" | wc -l)
          BUILD=$((BUILD + 1))

          VERSION="${PREFIX}${BUILD}"
          echo "version=${VERSION}" >> $GITHUB_OUTPUT
          echo "CalVer version: ${VERSION}"

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'
          cache: 'npm'

      - name: Install dependencies
        run: npm ci

      - name: Build system
        run: npm run build

      - name: Deploy to Foundry server
        uses: burnett01/rsync-deployments@7.0.1
        with:
          switches: -avz --delete --exclude='.git' --exclude='node_modules' --exclude='foundrydata' --exclude='.env' --exclude='.env.example' --exclude='.gitea' --exclude='.github' --exclude='.claude' --exclude='.husky' --exclude='docs' --exclude='docker-compose.yml' --exclude='test_results'
          path: ./
          remote_path: /opt/foundry/data/Data/systems/vagabond/
          remote_host: ${{ secrets.DEPLOY_HOST }}
          remote_user: root
          remote_key: ${{ secrets.DEPLOY_SSH_KEY }}

      - name: Fix ownership and restart Foundry
        uses: appleboy/ssh-action@v1
        with:
          host: ${{ secrets.DEPLOY_HOST }}
          username: root
          key: ${{ secrets.DEPLOY_SSH_KEY }}
          script: |
            chown -R 1000:1000 /opt/foundry/data/Data/systems/vagabond/
            cd /opt/foundry && docker compose restart foundry

      # Create git tag via Gitea API (avoids branch protection issues)
      - name: Tag release
        if: success()
        run: |
          curl -s -X POST \
            -H "Authorization: token ${{ github.token }}" \
            -H "Content-Type: application/json" \
            -d "{\"tag_name\": \"${{ steps.meta.outputs.version }}\", \"target\": \"${{ github.sha }}\", \"name\": \"${{ steps.meta.outputs.version }}\"}" \
            "${{ github.server_url }}/api/v1/repos/${{ github.repository }}/tags"
          echo "Created tag ${{ steps.meta.outputs.version }}"
