# Gitea Actions Auto-Sort Configuration for Datasheets and Images
# This workflow automatically moves files with specific prefixes to their correct directories

name: Auto-Sort Files

on:
  push:
    branches: [ main, develop ]
  pull_request:
    branches: [ main ]

jobs:
  auto-sort:
    runs-on: ubuntu-latest
    # Skip if the commit was made by the CI bot to prevent infinite loops
    if: ${{ !contains(github.event.head_commit.message, 'Auto-sort:') }}
    
    steps:
    - name: Checkout repository
      uses: actions/checkout@v4
      with:
        fetch-depth: 0
        token: ${{ secrets.CI_BOT_TOKEN }}

    - name: Auto-sort datasheets and images
      run: |
        #!/bin/bash
        set -e
        
        # Flag to track if any files were moved
        FILES_MOVED=false
        
        # Function to move files with logging
        move_file() {
          local src="$1"
          local dest="$2"
          local dest_dir=$(dirname "$dest")
          
          # Create destination directory if it doesn't exist
          mkdir -p "$dest_dir"
          
          # Move file if it's not already in the correct location
          if [ "$src" != "$dest" ] && [ -f "$src" ]; then
            echo "Moving: $src -> $dest"
            # Use git mv to preserve git tracking
            git mv "$src" "$dest"
            return 0  # Success - file was moved
          fi
          return 1  # No file moved
        }
        
        # Find and move datasheet files (DS_ prefix)
        echo "Searching for datasheet files with DS_ prefix..."
        mapfile -t datasheet_files < <(find . -name "DS_*.pdf" -o -name "DS_*.doc" -o -name "DS_*.docx" -o -name "DS_*.txt")
        for file in "${datasheet_files[@]}"; do
          if [[ -n "$file" && "$file" != ./docs/datasheets/* ]]; then
            filename=$(basename "$file")
            if move_file "$file" "docs/datasheets/$filename"; then
              FILES_MOVED=true
            fi
          fi
        done
        
        # Find and move image files (IMG_ prefix)
        echo "Searching for image files with IMG_ prefix..."
        mapfile -t image_files < <(find . -name "IMG_*.png" -o -name "IMG_*.jpg" -o -name "IMG_*.jpeg" -o -name "IMG_*.svg" -o -name "IMG_*.gif" -o -name "IMG_*.pdf" -o -name "IMG_*.webp")
        for file in "${image_files[@]}"; do
          if [[ -n "$file" && "$file" != ./docs/images/* ]]; then
            filename=$(basename "$file")
            if move_file "$file" "docs/images/$filename"; then
              FILES_MOVED=true
            fi
          fi
        done
        
        # Check if any files were moved
        if [ "$FILES_MOVED" = true ]; then
          echo "Files were moved. Setting output for commit step."
          echo "files_moved=true" >> $GITHUB_OUTPUT
        else
          echo "No files needed to be moved."
          echo "files_moved=false" >> $GITHUB_OUTPUT
        fi
      id: sort_files

    - name: Commit moved files
      if: steps.sort_files.outputs.files_moved == 'true'
      run: |
        git config --local user.email "${{ vars.WORKER_EMAIL }}"
        git config --local user.name "${{ vars.WORKER_USERNAME }}"
        # git mv already stages the changes, so no need for git add
        git commit -m "Auto-sort: Move DS_ and IMG_ prefixed files to correct directories
        
        - Moved datasheet files (DS_*) to docs/datasheets/
        - Moved image files (IMG_*) to docs/images/
        - Automated by Gitea Actions auto-sort workflow"
        
    - name: Push changes
      if: steps.sort_files.outputs.files_moved == 'true'
      run: |
        # Get the repository URL dynamically
        REPO_URL=$(git config --get remote.origin.url)
        
        # Extract the base URL and repository path
        if [[ $REPO_URL == https://* ]]; then
          # HTTPS URL format: https://git.b4l.co.th/B4L/repo-name.git
          DOMAIN=$(echo $REPO_URL | sed 's|https://\([^/]*\)/.*|\1|')
          REPO_PATH=$(echo $REPO_URL | sed 's|https://[^/]*/\(.*\)|\1|')
          PUSH_URL="https://${{ vars.WORKER_USERNAME }}:${{ secrets.CI_BOT_TOKEN }}@${DOMAIN}/${REPO_PATH}"
        else
          # SSH URL format: git@git.b4l.co.th:B4L/repo-name.git
          DOMAIN=$(echo $REPO_URL | sed 's|git@\([^:]*\):.*|\1|')
          REPO_PATH=$(echo $REPO_URL | sed 's|git@[^:]*:\(.*\)|\1|')
          PUSH_URL="https://${{ vars.WORKER_USERNAME }}:${{ secrets.CI_BOT_TOKEN }}@${DOMAIN}/${REPO_PATH}"
        fi
        
        echo "Repository URL: $REPO_URL"
        echo "Domain: $DOMAIN"
        echo "Repository Path: $REPO_PATH"
        echo "Worker: ${{ vars.WORKER_USERNAME }}"
        echo "Pushing to: https://${DOMAIN}/${REPO_PATH} (with authentication)"
        git push $PUSH_URL HEAD:${{ github.ref_name }}

    - name: Create summary
      run: |
        echo "## Auto-Sort Results" >> $GITHUB_STEP_SUMMARY
        echo "" >> $GITHUB_STEP_SUMMARY
        if [ "${{ steps.sort_files.outputs.files_moved }}" = "true" ]; then
          echo "✅ Files were automatically moved to correct directories" >> $GITHUB_STEP_SUMMARY
          echo "" >> $GITHUB_STEP_SUMMARY
          echo "### Moved Files:" >> $GITHUB_STEP_SUMMARY
          echo "- Datasheet files (DS_*) → docs/datasheets/" >> $GITHUB_STEP_SUMMARY
          echo "- Image files (IMG_*) → docs/images/" >> $GITHUB_STEP_SUMMARY
        else
          echo "ℹ️ No files needed to be moved - all files are properly organized" >> $GITHUB_STEP_SUMMARY
        fi
        echo "" >> $GITHUB_STEP_SUMMARY
        echo "### Supported Prefixes:" >> $GITHUB_STEP_SUMMARY
        echo "- **DS_**: Datasheets (PDF, DOC, DOCX, TXT)" >> $GITHUB_STEP_SUMMARY
        echo "- **IMG_**: Images (PNG, JPG, SVG, GIF, PDF, WEBP)" >> $GITHUB_STEP_SUMMARY
