#!/bin/bash
set -e

# Web Quality Audit Script
# Analyzes HTML files for common quality issues

usage() {
  echo "Usage: $0 <file_or_directory>" >&2
  echo "Analyzes HTML files for web quality issues." >&2
  return 1
}

if [[ -z "$1" ]]; then
  usage
  exit 1
fi

TARGET="$1"
ISSUES=()
WARNINGS=()

analyze_html() {
  local file="$1"
  echo "Analyzing: $file" >&2

  # Check for doctype
  if ! grep -qi "<!doctype html>" "$file"; then
    ISSUES+=("$file: Missing HTML5 doctype")
  fi

  # Check for charset
  if ! grep -qi 'charset.*utf-8' "$file"; then
    WARNINGS+=("$file: Missing or non-UTF-8 charset declaration")
  fi

  # Check for viewport
  if ! grep -qi 'name="viewport"' "$file"; then
    ISSUES+=("$file: Missing viewport meta tag")
  fi

  # Check for lang attribute
  if ! grep -qi '<html.*lang=' "$file"; then
    ISSUES+=("$file: Missing lang attribute on <html>")
  fi

  # Check for images without alt
  if grep -qE '<img[^>]*>' "$file" && grep -qE '<img(?![^>]*alt=)[^>]*>' "$file" 2>/dev/null; then
    WARNINGS+=("$file: Possible images without alt text")
  fi

  # Check for title tag
  if ! grep -qi '<title>' "$file"; then
    ISSUES+=("$file: Missing <title> tag")
  fi

  # Check for HTTPS in links
  if grep -qE 'http://' "$file"; then
    WARNINGS+=("$file: Contains non-HTTPS URLs")
  fi

  return 0
}

# Process files
if [[ -d "$TARGET" ]]; then
  while IFS= read -r -d '' file; do
    analyze_html "$file"
  done < <(find "$TARGET" \( -name "*.html" -o -name "*.htm" \) -print0)
elif [[ -f "$TARGET" ]]; then
  analyze_html "$TARGET"
else
  echo "Error: $TARGET is not a valid file or directory" >&2
  exit 1
fi

# Output results as JSON
echo '{'
echo '  "issues": ['
for i in "${!ISSUES[@]}"; do
  if [[ $i -gt 0 ]]; then echo ','; fi
  echo -n "    \"${ISSUES[$i]}\""
done
echo ''
echo '  ],'
echo '  "warnings": ['
for i in "${!WARNINGS[@]}"; do
  if [[ $i -gt 0 ]]; then echo ','; fi
  echo -n "    \"${WARNINGS[$i]}\""
done
echo ''
echo '  ],'
echo "  \"issueCount\": ${#ISSUES[@]},"
echo "  \"warningCount\": ${#WARNINGS[@]}"
echo '}'
