# Bash Linting & Formatting Tasks
# Provides bash script validation, linting, and auto-formatting for all bash files in the project.

version: '3'

vars:
  DEFAULT_PATTERNS: '*.sh,**/*.sh,bin/*,scripts/**/*.sh'

tasks:
  default:
    desc: 'Show available Bash tasks'
    aliases: [help, h]
    silent: true
    cmds:
      - |
        # Color codes
        GREEN='\033[0;32m'
        YELLOW='\033[0;33m'
        BOLD='\033[1m'
        NC='\033[0m'

        echo -e "${BOLD}Bash Linting & Formatting${NC}"
        echo ""
        echo "Command                            Alias     Description                              Examples"
        echo "───────────────────────────────────────────────────────────────────────────────────────────────────"
        echo -e "  ${GREEN}task bash:lint${NC}                   ${YELLOW}l${NC}         Lint bash files with shellcheck         FILES=\"*.sh\""
        echo -e "  ${GREEN}task bash:format${NC}                 ${YELLOW}f${NC}         Format bash files with shfmt            FILES=\"*.sh\""
        echo -e "  ${GREEN}task bash:format:check${NC}           ${YELLOW}fc${NC}        Check bash formatting without changes   FILES=\"*.sh\""
        echo -e "  ${GREEN}task bash:setup${NC}                  ${YELLOW}s${NC}         Install bash tools globally"
        echo ""
        echo -e "${BOLD}Usage Examples:${NC}"
        echo -e "  task bash:lint                            # Lint all bash files (quiet on success)"
        echo -e "  task bash:lint FILES=\"scripts/**/*.sh\"    # Lint specific pattern"
        echo -e "  VERBOSE=1 task bash:lint                  # Show output even on success"
        echo -e "  task bash:format                          # Format all bash files"
        echo -e "  task bash:format:check                    # Check formatting without changes"

  lint:
    desc: 'Lint bash files with shellcheck (quiet on success, use VERBOSE=1 for details)'
    aliases: [l]
    silent: true
    vars:
      FILE_PATTERNS: '{{.FILES | default .DEFAULT_PATTERNS}}'
      VERBOSE_FLAG: '{{.VERBOSE | default ""}}'
    cmds:
      - |
        REPO_URL=$(task git:repo:url 2>/dev/null || echo "")
        SCRIPT="{{.TASKFILE_DIR}}/../src/tasks/bash/lint.ts"

        if [ "$REPO_URL" = "https://github.com/northbridge-security/ai-toolkit" ] && [ -f "$SCRIPT" ]; then
          bun run "$SCRIPT"
        else
          # Fallback to ai-toolkit CLI
          npx @northbridge-security/ai-toolkit bash lint -f "$FILES"
        fi
    env:
      FILES: '{{.FILE_PATTERNS}}'
      VERBOSE: '{{.VERBOSE_FLAG}}'

  format:
    desc: 'Format bash files with shfmt (applies changes)'
    aliases: [f, fix]
    silent: true
    vars:
      FILE_PATTERNS: '{{.FILES | default .DEFAULT_PATTERNS}}'
      VERBOSE_FLAG: '{{.VERBOSE | default ""}}'
    cmds:
      - |
        REPO_URL=$(task git:repo:url 2>/dev/null || echo "")
        SCRIPT="{{.TASKFILE_DIR}}/../src/tasks/bash/format.ts"

        if [ "$REPO_URL" = "https://github.com/northbridge-security/ai-toolkit" ] && [ -f "$SCRIPT" ]; then
          bun run "$SCRIPT"
        else
          # Fallback to ai-toolkit CLI
          npx @northbridge-security/ai-toolkit bash format -f "$FILES"
        fi
    env:
      FILES: '{{.FILE_PATTERNS}}'
      VERBOSE: '{{.VERBOSE_FLAG}}'

  format:check:
    desc: 'Check bash formatting without making changes (quiet on success, use VERBOSE=1 for details)'
    aliases: [fc]
    silent: true
    vars:
      FILE_PATTERNS: '{{.FILES | default .DEFAULT_PATTERNS}}'
      VERBOSE_FLAG: '{{.VERBOSE | default ""}}'
    cmds:
      - |
        REPO_URL=$(task git:repo:url 2>/dev/null || echo "")
        SCRIPT="{{.TASKFILE_DIR}}/../src/tasks/bash/format-check.ts"

        if [ "$REPO_URL" = "https://github.com/northbridge-security/ai-toolkit" ] && [ -f "$SCRIPT" ]; then
          bun run "$SCRIPT"
        else
          # Fallback to ai-toolkit CLI
          npx @northbridge-security/ai-toolkit bash format --check -f "$FILES"
        fi
    env:
      FILES: '{{.FILE_PATTERNS}}'
      VERBOSE: '{{.VERBOSE_FLAG}}'

  setup:
    desc: 'Install bash tools globally (shellcheck, shfmt)'
    aliases: [s]
    silent: true
    cmds:
      - |
        REPO_URL=$(task git:repo:url 2>/dev/null || echo "")
        SCRIPT="{{.TASKFILE_DIR}}/../src/tasks/bash/setup.ts"

        if [ "$REPO_URL" = "https://github.com/northbridge-security/ai-toolkit" ] && [ -f "$SCRIPT" ]; then
          bun run "$SCRIPT"
        else
          # Fallback to ai-toolkit CLI
          npx @northbridge-security/ai-toolkit bash setup
        fi
