"""Reproduce the dated signal-disagreement article, without fetching new prices.

The frozen input is public screener output, not a forward-return backtest.
Run: python scripts/analyze_signal_snapshot.py
"""
import json
import statistics
import sys
from collections import Counter
from pathlib import Path

ROOT = Path(__file__).resolve().parents[1]
INPUT = ROOT / 'backend/content/evidence/2026-10-02-screener.json'


def analyze(snapshot):
    result = {}
    for market, data in snapshot['markets'].items():
        rows = data['stocks']
        passed = [r for r in rows if r['passed'] == 8]
        strong = [r for r in rows if r['rs'] >= 90]
        liquid = [r for r in passed if r['avgVolumeThousands'] >= 500]
        result[market] = dict(
            date=data['date'], total=len(rows), passed=len(passed),
            passRate=round(100 * len(passed) / len(rows), 2),
            rs90=len(strong), rs90Below8=sum(r['passed'] < 8 for r in strong),
            passedDown=sum(r['changePct'] < 0 for r in passed),
            passedLiquid=len(liquid), passedExtended10=sum(r['extension20Pct'] is not None and r['extension20Pct'] > 10 for r in passed),
            adrMedian=round(statistics.median(r['adrPct'] for r in rows if r['adrPct'] is not None), 2),
            passedAdrMedian=round(statistics.median(r['adrPct'] for r in passed if r['adrPct'] is not None), 2),
            largestPassedIndustries=Counter(r['industry'] for r in passed).most_common(3),
            tss=data['tss'],
        )
    return result


if __name__ == '__main__':
    if hasattr(sys.stdout, 'reconfigure'):
        sys.stdout.reconfigure(encoding='utf-8')
    source = Path(sys.argv[1]) if len(sys.argv) > 1 else INPUT
    print(json.dumps(analyze(json.loads(source.read_text(encoding='utf-8'))), ensure_ascii=False, indent=2))
