#!/usr/bin/env python3
from __future__ import annotations
import argparse
import json
import re
from pathlib import Path

EXTENSIONS = {'.html', '.htm', '.php', '.cfm', '.cfml', '.jsp', '.cshtml', '.razor', '.jsx', '.tsx', '.vue', '.svelte'}
PATTERNS = {
    'title': re.compile(r'<title\b|\btitle\s*[:=]', re.I),
    'description': re.compile(r'name=["\']description["\']|\bdescription\s*[:=]', re.I),
    'canonical': re.compile(r'rel=["\']canonical["\']|\bcanonical\s*[:=]', re.I),
    'robots': re.compile(r'name=["\']robots["\']|\brobots\s*[:=]', re.I),
    'open_graph': re.compile(r'property=["\']og:', re.I),
    'twitter_card': re.compile(r'name=["\']twitter:', re.I),
    'json_ld': re.compile(r'application/ld\+json', re.I),
    'manifest': re.compile(r'rel=["\']manifest["\']', re.I),
    'html_lang': re.compile(r'<html\b[^>]*\blang=', re.I),
}

def main() -> int:
    parser = argparse.ArgumentParser(description='Inspect static metadata signals in frontend templates.')
    parser.add_argument('project', nargs='?', default='.')
    parser.add_argument('--json', action='store_true')
    parser.add_argument('--max-files', type=int, default=2000)
    args = parser.parse_args()
    root = Path(args.project).resolve()
    rows = []
    for path in sorted(root.rglob('*')):
        if len(rows) >= args.max_files:
            break
        if not path.is_file() or path.suffix.lower() not in EXTENSIONS:
            continue
        if any(part in {'.git', 'node_modules', 'vendor', 'dist', 'build'} for part in path.parts):
            continue
        try:
            text = path.read_text(encoding='utf-8', errors='ignore')
        except OSError:
            continue
        signals = [name for name, pattern in PATTERNS.items() if pattern.search(text)]
        if signals:
            rows.append({'file': str(path.relative_to(root)), 'signals': signals})
    summary = {key: sum(key in row['signals'] for row in rows) for key in PATTERNS}
    result = {'root': str(root), 'files_with_metadata_signals': len(rows), 'summary': summary, 'files': rows}
    if args.json:
        print(json.dumps(result, ensure_ascii=False, indent=2))
    else:
        print(f"Root: {root}")
        print(f"Files with metadata signals: {len(rows)}")
        for key, value in summary.items():
            print(f"{key}: {value}")
        for row in rows[:100]:
            print(f"- {row['file']}: {', '.join(row['signals'])}")
    return 0

if __name__ == '__main__':
    raise SystemExit(main())
