#!/usr/bin/env python3
"""Reproduce a review shortlist from the public synthetic extraction. No Amazon/API calls."""
import argparse
import csv
import hashlib
import json
from collections import Counter
from decimal import Decimal, InvalidOperation
from pathlib import Path

parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument('--input', type=Path, default=Path(__file__).resolve().parents[1] / 'public/pdf-challenge/sunrise-wholesale-extracted.csv')
parser.add_argument('--output', type=Path, default=Path(__file__).resolve().parents[1] / 'public/downloads/catalog-study')
parser.add_argument('--max-unit-cost', type=Decimal, default=Decimal('5.00'))
args = parser.parse_args()
if not args.max_unit_cost.is_finite() or args.max_unit_cost < 0:
    parser.error('--max-unit-cost must be a finite, non-negative amount')
rows = list(csv.DictReader(args.input.open(encoding='utf-8-sig', newline='')))
results = []
for row in rows:
    try:
        cost = Decimal(row['parsed_cost_price'])
    except InvalidOperation:
        cost = Decimal('0')
    if row['outcome'] != 'accepted':
        decision = 'extraction_quarantine'
    elif row['Availability'] not in {'IN', 'LOW', 'NEW'}:
        decision = 'availability_review'
    elif not cost.is_finite() or cost <= 0:
        decision = 'cost_review'
    elif cost > args.max_unit_cost:
        decision = 'above_assumed_cost_cap'
    else:
        decision = 'selected_for_manual_review'
    results.append({**row, 'review_decision': decision})
summary = {
    'dataset': 'Sunrise Wholesale synthetic public sample',
    'input_sha256': hashlib.sha256(args.input.read_bytes()).hexdigest(),
    'input_rows': len(rows),
    'extraction_outcomes': dict(sorted(Counter(r['outcome'] for r in rows).items())),
    'review_decisions': dict(sorted(Counter(r['review_decision'] for r in results).items())),
    'assumptions': {'max_unit_cost_usd': str(args.max_unit_cost), 'availability_included': ['IN', 'LOW', 'NEW']},
    'limitations': ['Synthetic product names and barcodes.', 'No Amazon matching, eligibility, fee or demand lookup was performed.', 'Selected means manual review, not a profitable purchase recommendation.', 'Availability and costs come from the published extraction, not a live supplier.'],
}
args.output.mkdir(parents=True, exist_ok=True)
with (args.output / 'results.csv').open('w', encoding='utf-8', newline='') as stream:
    writer = csv.DictWriter(stream, fieldnames=list(results[0]))
    writer.writeheader()
    writer.writerows(results)
(args.output / 'summary.json').write_text(json.dumps(summary, indent=2) + '\n')
print(json.dumps(summary, indent=2))
