#!/usr/bin/env python3
"""Check saved arithmetic and the synthetic fixture, using only local files."""
from pathlib import Path
import csv
import importlib.util
import json

ROOT = Path(__file__).resolve().parent
spec = importlib.util.spec_from_file_location('newsletter_cost_model', ROOT / 'cost-model.py')
model = importlib.util.module_from_spec(spec)
spec.loader.exec_module(model)
inputs = json.loads((ROOT / 'cost-inputs.json').read_text())
actual = model.render(inputs)
assert actual == (ROOT / 'cost-model-results.json').read_text(), 'Saved results differ from local calculation'
result = json.loads(actual)
assert result['scenarioCount'] == 14
by_key = {(r['provider'], r['plan'], r['subscribers']): r for r in result['scenarios']}
assert by_key[('beehiiv', 'Lite', 1000)]['annualTotalFromMonthlyDisplayArithmetic'] == '588.00'
assert by_key[('beehiiv', 'Lite', 1000)]['publishedAnnualTotalQuote'] is None
assert by_key[('Kit', 'Creator', 10000)]['monthlyEquivalentFromAnnualTotalArithmetic'] == '115.83'
assert by_key[('Kit', 'Pro', 1000)]['publishedAnnualTotalQuote'] is None
assert by_key[('Kit', 'Pro', 1000)]['firstYearPromoAnnualTotalQuote'] == '593.00'
assert by_key[('beehiiv', 'Free', 10000)]['available'] is False
assert by_key[('beehiiv', 'Free', 10000)]['twelveMonthlyBillsArithmetic'] is None
assert by_key[('Buttondown', 'Subscriber calculator base', 1000)]['publishedAnnualTotalQuote'] == '90.00'
with (ROOT / 'subscribers.synthetic.csv').open(newline='') as f:
    rows = list(csv.DictReader(f))
assert len(rows) == 6
assert len({r['fixture_email'] for r in rows}) == 5
assert all(r['fixture_email'].endswith('@example.invalid') for r in rows)
assert {'pending', 'unsubscribed'} <= {r['local_state'] for r in rows}
assert any('Réadér' in r['display_name'] for r in rows)
assert any(',' in r['fixture_tag'] for r in rows)
assert 'not sent' in (ROOT / 'example-issue.md').read_text()
print(json.dumps({'status':'pass','localCostScenarios':14,'syntheticRows':6,'uniqueSyntheticIdentities':5,'providerWorkflowsExecuted':0,'networkRequests':0}, sort_keys=True))
