name: Auto I18N Weekly

env:
  TRANSLATION_API_KEY: ${{ secrets.TRANSLATE_API_KEY }}
  TRANSLATION_MODEL: ${{ vars.AUTO_I18N_MODEL || 'deepseek/deepseek-v3.1'}}
  TRANSLATION_BASE_URL: ${{ vars.AUTO_I18N_BASE_URL || 'https://api.ppinfra.com/openai'}}
  TRANSLATION_BASE_LOCALE: ${{ vars.AUTO_I18N_BASE_LOCALE || 'en-us'}}

on:
  schedule:
    # Runs at 00:00 UTC every Sunday.
    # This corresponds to 08:00 AM UTC+8 (Beijing time) every Sunday.
    - cron: "0 0 * * 0"
  workflow_dispatch:

jobs:
  auto-i18n:
    runs-on: ubuntu-latest
    name: Auto I18N
    permissions:
      contents: write
      pull-requests: write

    steps:
      - name: 🐈‍⬛ Checkout
        uses: actions/checkout@v6
        with:
          fetch-depth: 0

      - name: 📦 Setting Node.js
        uses: actions/setup-node@v6
        with:
          node-version: 22

      - name: 📦 Install pnpm
        uses: pnpm/action-setup@v4

      - name: 📂 Get pnpm store directory
        id: pnpm-cache
        shell: bash
        run: echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_OUTPUT

      - name: 💾 Cache pnpm dependencies
        uses: actions/cache@v4
        with:
          path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
          key: ${{ runner.os }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }}
          restore-keys: |
            ${{ runner.os }}-pnpm-

      - name: 📦 Install dependencies
        run: |
          pnpm install

      - name: 🏃‍♀️ Translate
        run: pnpm i18n:sync && pnpm i18n:translate

      - name: 🔍 Format
        run: pnpm format

      - name: 🔍 Check for changes
        id: git_status
        run: |
          # Check if there are any uncommitted changes
          git reset -- package.json pnpm-lock.yaml  # 不提交 package.json 和 pnpm-lock.yaml 的更改
          git diff --exit-code --quiet || echo "::set-output name=has_changes::true"
          git status --porcelain

      - name: 📅 Set current date for PR title
        id: set_date
        run: echo "CURRENT_DATE=$(date +'%b %d, %Y')" >> $GITHUB_ENV # e.g., "Jun 06, 2024"

      - name: 🚀 Create Pull Request if changes exist
        if: steps.git_status.outputs.has_changes == 'true'
        uses: peter-evans/create-pull-request@v8
        with:
          token: ${{ secrets.GITHUB_TOKEN }} # Use the built-in GITHUB_TOKEN for bot actions
          commit-message: "feat(bot): Weekly automated script run"
          title: "🤖 Weekly Auto I18N Sync: ${{ env.CURRENT_DATE }}"
          body: |
            This PR includes changes generated by the weekly auto i18n.
            Review the changes before merging.

            ---
            _Generated by the automated weekly workflow_
          branch: "auto-i18n-weekly-${{ github.run_id }}" # Unique branch name
          base: "main" # Or 'develop', set your base branch
          delete-branch: true # Delete the branch after merging or closing the PR

      - name: 📢 Notify if no changes
        if: steps.git_status.outputs.has_changes != 'true'
        run: echo "Bot script ran, but no changes were detected. No PR created."

      - name: Send failure notification to Feishu
        if: always() && (failure() || cancelled())
        shell: bash
        env:
          FEISHU_WEBHOOK_URL: ${{ secrets.FEISHU_WEBHOOK_URL }}
          FEISHU_WEBHOOK_SECRET: ${{ secrets.FEISHU_WEBHOOK_SECRET }}
          RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
          JOB_STATUS: ${{ job.status }}
        run: |
          # Determine status and color
          if [ "$JOB_STATUS" = "cancelled" ]; then
            STATUS_TEXT="已取消"
            COLOR="orange"
          else
            STATUS_TEXT="失败"
            COLOR="red"
          fi

          # Build description using printf
          DESCRIPTION=$(printf "**状态:** %s\n\n**工作流:** [查看详情](%s)" "$STATUS_TEXT" "$RUN_URL")

          # Send notification
          pnpm tsx scripts/feishu-notify.ts send \
            -t "自动国际化${STATUS_TEXT}" \
            -d "$DESCRIPTION" \
            -c "${COLOR}"
