# Gitea CI/CD for alrahma_web_client (React + Vite + TypeScript)
#
# Triggers:
#   - Push to any branch
#   - Pull requests
#   - Tags
#
# Stages: lint → build → deploy (manual)

name: Web Client CI/CD

on:
  push:
    branches: [main, master, develop, 'feature/**', 'fix/**']
    tags: ['v*']
  pull_request:
    branches: [main, master, develop]

env:
  CI: true

jobs:
  # ──────────────────────────────────────────────
  #  LINT: ESLint with TypeScript
  # ──────────────────────────────────────────────
  lint:
    name: Lint (ESLint + TypeScript)
    runs-on: ubuntu-latest
    container:
      image: node:22-alpine
    steps:
      - name: Checkout repository
        env:
          GIT_SSL_NO_VERIFY: "1"
        run: |
          apk add --no-cache git
          SERVER="${{ github.server_url }}"
          REPO="${{ github.repository }}"
          TOKEN="${{ github.token }}"
          git clone --depth 1 \
            "https://x-access-token:${TOKEN}@${SERVER#https://}/${REPO}.git" \
            .
          git fetch --depth 1 origin "${{ github.sha }}"
          git checkout "${{ github.sha }}"
        shell: sh

      - name: Install dependencies
        run: npm ci --no-audit --no-fund

      - name: Run ESLint
        run: npm run lint

  # ──────────────────────────────────────────────
  #  BUILD: TypeScript + Vite
  # ──────────────────────────────────────────────
  build:
    name: Build (tsc + Vite)
    runs-on: ubuntu-latest
    container:
      image: node:22-alpine
    steps:
      - name: Checkout repository
        env:
          GIT_SSL_NO_VERIFY: "1"
        run: |
          apk add --no-cache git
          SERVER="${{ github.server_url }}"
          REPO="${{ github.repository }}"
          TOKEN="${{ github.token }}"
          git clone --depth 1 \
            "https://x-access-token:${TOKEN}@${SERVER#https://}/${REPO}.git" \
            .
          git fetch --depth 1 origin "${{ github.sha }}"
          git checkout "${{ github.sha }}"
        shell: sh

      - name: Install dependencies
        run: npm ci --no-audit --no-fund

      - name: Build project
        run: npm run build
        env:
          VITE_API_ORIGIN: ${{ vars.VITE_API_ORIGIN || '' }}

  # ──────────────────────────────────────────────
  #  DEPLOY (manual): to shared hosting via SSH
  # ──────────────────────────────────────────────
  deploy:
    name: Deploy to shared hosting
    runs-on: ubuntu-latest
    container:
      image: node:22-alpine
    if: github.ref == 'refs/heads/develop'
    needs: [lint, build]
    environment:
      name: production
      url: ${{ vars.PRODUCTION_URL }}
    steps:
      - name: Checkout repository
        env:
          GIT_SSL_NO_VERIFY: "1"
        run: |
          apk add --no-cache git
          SERVER="${{ github.server_url }}"
          REPO="${{ github.repository }}"
          TOKEN="${{ github.token }}"
          git clone --depth 1 \
            "https://x-access-token:${TOKEN}@${SERVER#https://}/${REPO}.git" \
            .
          git fetch --depth 1 origin "${{ github.sha }}"
          git checkout "${{ github.sha }}"
        shell: sh

      - name: Install dependencies
        run: npm ci --no-audit --no-fund

      - name: Build project
        run: npm run build
        env:
          VITE_API_ORIGIN: ${{ vars.VITE_API_ORIGIN || '' }}

      - name: Install SSH and rsync
        run: |
          apk add --no-cache openssh-client sshpass rsync

      - name: Deploy built files to shared hosting
        run: |
          sshpass -p "${{ secrets.SSH_PASSWORD }}" rsync -avz --delete \
            -e "ssh -p ${{ vars.SSH_PORT || 22 }} -o StrictHostKeyChecking=no" \
            --exclude='.htaccess' \
            ./dist/ \
            ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:${{ vars.SSH_TARGET_DIR }}/
