"""Read synthetic examples and print Decimal arithmetic; no network or file writes."""
from decimal import Decimal
import json
from pathlib import Path
import sys


def number(value):
    result = Decimal(value)
    if not result.is_finite() or result < 0:
        raise ValueError('Finite non-negative input required')
    return result


def calculate(data):
    if data['kind'] != 'synthetic_arithmetic_not_device_measurements':
        raise ValueError('This example is not a measurement calculator')
    interval = data['interval']
    energy = number(interval['end_kwh']) - number(interval['start_kwh'])
    hours = number(interval['hours'])
    if energy < 0 or hours <= 0:
        raise ValueError('Counter discontinuity or invalid elapsed time')
    segments = data['rate_segments']
    if sum(number(s['kwh']) for s in segments) != energy:
        raise ValueError('Tariff segments must account for this interval energy')
    annual = {k: number(v) for k, v in data['annual_scenario'].items()}
    if annual['days'] <= 0 or not 0 <= annual['avoided_hours_per_day'] <= 24 or not 0 <= annual['monitor_hours_per_day'] <= 24:
        raise ValueError('Invalid model duration')
    gross = annual['avoided_load_w'] * annual['avoided_hours_per_day'] * annual['days'] / 1000
    overhead = annual['added_monitor_w'] * annual['monitor_hours_per_day'] * annual['days'] / 1000
    results = {'interval_kwh': energy, 'average_w': energy * 1000 / hours, 'single_rate_cost_cu': energy * number(interval['unit_rate']), 'multi_rate_cost_cu': sum(number(s['kwh']) * number(s['unit_rate']) for s in segments), 'annual_gross_kwh': gross, 'annual_monitor_kwh': overhead, 'annual_net_kwh': gross - overhead, 'annual_net_cost_cu': (gross - overhead) * annual['unit_rate']}
    return {'kind': data['kind'], 'results': {k: format(v.normalize(), 'f') for k, v in results.items()}, 'boundary': 'Arithmetic only; invented inputs, not measured savings or equipment compatibility.'}


if __name__ == '__main__':
    path = Path(sys.argv[1]) if len(sys.argv) == 2 else Path(__file__).with_name('examples.json')
    print(json.dumps(calculate(json.loads(path.read_text(encoding='utf-8'))), indent=2))
