#!/bin/bash
# Check implementation compliance against DESIGN.md
# Usage: tools/check/design-compliance.sh <site-dir>
# Example: tools/check/design-compliance.sh sites/example.com-v1
# Exit codes: 0=compliant, 1=compliance issues, 2=input error

set -e

SITE_DIR="${1:-.}"

if [[ ! -d "$SITE_DIR" ]]; then
    echo "ERROR:directory_not_found:$SITE_DIR"
    exit 2
fi

SITE_NAME=$(basename "$SITE_DIR")
DESIGN_FILE="$SITE_DIR/DESIGN.md"
HTML_FILE="$SITE_DIR/index.html"
CSS_FILE="$SITE_DIR/styles.css"
JS_FILE="$SITE_DIR/script.js"

echo "╔════════════════════════════════════════════════════════════╗"
echo "║  DESIGN COMPLIANCE CHECK: $SITE_NAME"
echo "╚════════════════════════════════════════════════════════════╝"
echo ""

# Check DESIGN.md exists
if [[ ! -f "$DESIGN_FILE" ]]; then
    echo "⚠ DESIGN.md not found in $SITE_DIR"
    echo "  Checking parent directory..."
    DESIGN_FILE="$(dirname "$SITE_DIR")/DESIGN.md"
    if [[ ! -f "$DESIGN_FILE" ]]; then
        echo "ERROR:design_file_not_found:$SITE_DIR"
        exit 2
    fi
fi
echo "✓ Found: $DESIGN_FILE"
echo ""

PASS=0
WARN=0
FAIL=0

# ============================================================
# 1. COLOR PALETTE CHECK
# ============================================================
echo "▶ Color Palette Compliance"
echo "  -------------------------"

# Extract hex colors from DESIGN.md (formats: #FFF, #FFFFFF, #fff)
DESIGN_COLORS=$(grep -oE '#[0-9A-Fa-f]{3,6}\b' "$DESIGN_FILE" 2>/dev/null | tr '[:lower:]' '[:upper:]' | sort -u || true)

if [[ -z "$DESIGN_COLORS" ]]; then
    echo "  ? No hex colors found in DESIGN.md"
    WARN=$((WARN + 1))
else
    echo "  Colors specified in DESIGN.md:"
    for color in $DESIGN_COLORS; do
        echo "    $color"
    done
    echo ""

    if [[ -f "$CSS_FILE" ]]; then
        echo "  Checking CSS for specified colors:"
        for color in $DESIGN_COLORS; do
            # Normalize to uppercase for comparison
            if grep -qi "$color" "$CSS_FILE" 2>/dev/null; then
                echo "    ✓ $color found in CSS"
                PASS=$((PASS + 1))
            else
                echo "    ? $color not found in CSS"
                WARN=$((WARN + 1))
            fi
        done
    fi
fi
echo ""

# ============================================================
# 2. TYPOGRAPHY CHECK
# ============================================================
echo "▶ Typography Compliance"
echo "  ----------------------"

# Common font names to look for in DESIGN.md
DESIGN_FONTS=$(grep -oE '(Inter|Helvetica|Arial|Roboto|Open Sans|Lato|Montserrat|Poppins|Source|Space|IBM Plex|JetBrains|Fira|Monaco|Consolas|Georgia|Merriweather|Playfair|Lora|Work Sans)[^,;)]*' "$DESIGN_FILE" 2>/dev/null | sort -u || true)

if [[ -z "$DESIGN_FONTS" ]]; then
    echo "  ? No common font names found in DESIGN.md"
    WARN=$((WARN + 1))
else
    echo "  Fonts specified in DESIGN.md:"
    for font in $DESIGN_FONTS; do
        echo "    $font"
    done
    echo ""

    echo "  Checking implementation:"
    for font in $DESIGN_FONTS; do
        FOUND=0
        if [[ -f "$CSS_FILE" ]] && grep -qi "$font" "$CSS_FILE" 2>/dev/null; then
            FOUND=1
        fi
        if [[ -f "$HTML_FILE" ]] && grep -qi "$font" "$HTML_FILE" 2>/dev/null; then
            FOUND=1
        fi

        if [[ $FOUND -eq 1 ]]; then
            echo "    ✓ $font found"
            PASS=$((PASS + 1))
        else
            echo "    ✗ $font NOT found"
            FAIL=$((FAIL + 1))
        fi
    done
fi
echo ""

# ============================================================
# 3. CSS ANIMATIONS CHECK
# ============================================================
echo "▶ CSS Animations"
echo "  ---------------"

if [[ -f "$CSS_FILE" ]]; then
    KEYFRAMES=$(grep -c '@keyframes' "$CSS_FILE" 2>/dev/null || echo "0")
    echo "  @keyframes defined: $KEYFRAMES"

    if [[ "$KEYFRAMES" -gt 0 ]]; then
        echo "  Animation names:"
        grep '@keyframes' "$CSS_FILE" | sed 's/@keyframes /    /' | sed 's/ {//'
        PASS=$((PASS + 1))
    fi

    # Check for transitions
    TRANSITIONS=$(grep -c 'transition' "$CSS_FILE" 2>/dev/null || echo "0")
    echo "  Transition rules: $TRANSITIONS"
else
    echo "  ? No CSS file found"
    WARN=$((WARN + 1))
fi
echo ""

# ============================================================
# 4. PERFORMANCE PATTERNS CHECK
# ============================================================
echo "▶ Performance Patterns"
echo "  ---------------------"

PERF_CHECKS=0

if [[ -f "$CSS_FILE" ]]; then
    if grep -q 'will-change' "$CSS_FILE" 2>/dev/null; then
        echo "  ✓ will-change optimization found"
        PERF_CHECKS=$((PERF_CHECKS + 1))
    fi

    if grep -q 'transform:' "$CSS_FILE" 2>/dev/null; then
        echo "  ✓ CSS transforms used (GPU-friendly)"
        PERF_CHECKS=$((PERF_CHECKS + 1))
    fi

    if grep -q 'backface-visibility' "$CSS_FILE" 2>/dev/null; then
        echo "  ✓ backface-visibility optimization"
        PERF_CHECKS=$((PERF_CHECKS + 1))
    fi
fi

if [[ -f "$JS_FILE" ]]; then
    if grep -q 'requestAnimationFrame' "$JS_FILE" 2>/dev/null; then
        echo "  ✓ requestAnimationFrame used"
        PERF_CHECKS=$((PERF_CHECKS + 1))
    fi

    if grep -q 'IntersectionObserver' "$JS_FILE" 2>/dev/null; then
        echo "  ✓ IntersectionObserver used"
        PERF_CHECKS=$((PERF_CHECKS + 1))
    fi

    if grep -qE 'throttle|debounce' "$JS_FILE" 2>/dev/null; then
        echo "  ✓ Throttle/debounce patterns"
        PERF_CHECKS=$((PERF_CHECKS + 1))
    fi

    if grep -q 'translate3d' "$JS_FILE" 2>/dev/null; then
        echo "  ✓ translate3d (GPU acceleration)"
        PERF_CHECKS=$((PERF_CHECKS + 1))
    fi
fi

if [[ $PERF_CHECKS -eq 0 ]]; then
    echo "  ? No performance optimizations detected"
    WARN=$((WARN + 1))
else
    PASS=$((PASS + PERF_CHECKS))
fi
echo ""

# ============================================================
# 5. JAVASCRIPT FEATURES CHECK
# ============================================================
echo "▶ JavaScript Features"
echo "  --------------------"

if [[ -f "$JS_FILE" ]]; then
    # Count classes
    CLASSES=$(grep -c 'class ' "$JS_FILE" 2>/dev/null || echo "0")
    echo "  Classes defined: $CLASSES"

    # Count functions
    FUNCTIONS=$(grep -cE '(function |const .* = .* =>|const .* = function)' "$JS_FILE" 2>/dev/null || echo "0")
    echo "  Functions/methods: ~$FUNCTIONS"

    # Check for event listeners
    LISTENERS=$(grep -c 'addEventListener' "$JS_FILE" 2>/dev/null || echo "0")
    echo "  Event listeners: $LISTENERS"

    # Check for common patterns
    echo "  Patterns detected:"
    if grep -q 'canvas' "$JS_FILE" 2>/dev/null; then
        echo "    ✓ Canvas rendering"
    fi
    if grep -q 'fetch\|XMLHttpRequest' "$JS_FILE" 2>/dev/null; then
        echo "    ✓ Network requests"
    fi
    if grep -qE 'localStorage|sessionStorage' "$JS_FILE" 2>/dev/null; then
        echo "    ✓ Storage API"
    fi
    if grep -q 'querySelector' "$JS_FILE" 2>/dev/null; then
        echo "    ✓ DOM queries"
    fi
else
    echo "  ? No JavaScript file found"
    WARN=$((WARN + 1))
fi
echo ""

# ============================================================
# 6. EXTERNAL DEPENDENCIES CHECK
# ============================================================
echo "▶ External Dependencies"
echo "  ----------------------"

if [[ -f "$HTML_FILE" ]]; then
    # Check for external scripts (CDN)
    EXT_SCRIPTS=$(grep -oE 'src="https?://[^"]+' "$HTML_FILE" 2>/dev/null | wc -l | tr -d ' ')
    echo "  External scripts: $EXT_SCRIPTS"

    # Check for external stylesheets
    EXT_CSS=$(grep -oE 'href="https?://[^"]+\.css' "$HTML_FILE" 2>/dev/null | wc -l | tr -d ' ')
    echo "  External CSS: $EXT_CSS"

    # Check for Google Fonts
    if grep -q 'fonts.googleapis.com' "$HTML_FILE" 2>/dev/null; then
        echo "  ✓ Google Fonts loaded"
    fi

    # Check for external images
    EXT_IMAGES=$(grep -oE 'src="https?://[^"]+\.(png|jpg|jpeg|gif|svg|webp)' "$HTML_FILE" 2>/dev/null | wc -l | tr -d ' ')
    if [[ "$EXT_IMAGES" -eq 0 ]]; then
        echo "  ✓ No external images (self-contained)"
        PASS=$((PASS + 1))
    else
        echo "  ? External images: $EXT_IMAGES"
        WARN=$((WARN + 1))
    fi
fi
echo ""

# ============================================================
# SUMMARY
# ============================================================
echo "════════════════════════════════════════════════════════════"
echo "COMPLIANCE SUMMARY"
echo "════════════════════════════════════════════════════════════"
echo "  ✓ Passed:   $PASS"
echo "  ? Warnings: $WARN"
echo "  ✗ Failed:   $FAIL"
echo ""

if [[ $FAIL -eq 0 ]]; then
    if [[ $WARN -eq 0 ]]; then
        echo "OK:full_compliance"
    else
        echo "OK:partial_compliance:$WARN warnings"
    fi
else
    echo "FAIL:compliance_issues:$FAIL failures, $WARN warnings"
    exit 1
fi
