"""AI Day synthetic exercise. Run: python3 verify_orders.py [orders.csv]."""
import csv
import hashlib
import json
import sys
from collections import Counter
from datetime import date
from pathlib import Path


def analyze(path):
    seen = {}
    excluded = Counter()
    products = Counter()
    valid = total = 0
    with path.open(encoding='utf-8', newline='') as handle:
        for row in csv.DictReader(handle):
            total += 1
            key = row['event_id']
            if key in seen:
                if seen[key] != row:
                    raise ValueError('Conflicting duplicate event_id: ' + key)
                excluded['duplicate'] += 1
                continue
            seen[key] = row
            try:
                day = date.fromisoformat(row['date'])
            except ValueError:
                excluded['invalid_date'] += 1
                continue
            if not row['amount_krw'].strip():
                excluded['missing_amount'] += 1
                continue
            amount = int(row['amount_krw'])
            if amount < 0 or row['type'] not in ('sale', 'refund'):
                raise ValueError('Invalid amount/type: ' + key)
            if not date(2026, 9, 1) <= day < date(2026, 10, 1):
                excluded['outside_period'] += 1
                continue
            valid += 1
            products[row['product']] += amount * (-1 if row['type'] == 'refund' else 1)
    assert total == valid + sum(excluded.values())
    return dict(input_sha256=hashlib.sha256(path.read_bytes()).hexdigest(),
                input_rows=total, valid_events=valid, excluded=dict(excluded),
                products_krw=dict(sorted(products.items())), net_krw=sum(products.values()))


if __name__ == '__main__':
    path = Path(sys.argv[1]) if len(sys.argv) > 1 else Path(__file__).with_name('orders.csv')
    print(json.dumps(analyze(path), ensure_ascii=False, indent=2))
