"""Reproduce interest only from a downloaded public research sample.
Usage: python3 reproduce.py sample.json
No network access, third-party dependencies or wallet actions.
"""
import json
import sys
from decimal import Decimal, localcontext
from pathlib import Path

sample = json.loads(Path(sys.argv[1]).read_text())
assert sample['schema'] == 'stack.public-research-sample.v1'
rows = sample['observations']
assert len(rows) == 8 and all(r['data']['is_final'] for r in rows)
assert all(r['data']['chain_id'] == 8453 and r['data']['address'] == '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' for r in rows)
assert all(rows[i]['observed_at'] < rows[i+1]['observed_at'] for i in range(len(rows)-1))
with localcontext() as context:
    context.prec = 80
    start = Decimal(rows[0]['data']['normalized_variable_debt'])
    end = Decimal(rows[-1]['data']['normalized_variable_debt'])
    interest = Decimal(sample['principal_tokens']) * (end / start - 1)
    expected = Decimal(sample['expected_interest_tokens'])
    assert abs(interest - expected) < Decimal('1e-65')
    print(json.dumps({'principal_usdc': sample['principal_tokens'], 'interest_usdc': str(interest), 'samples': len(rows), 'includes_execution_or_service_costs': False, 'full_strategy_backtest': False}, indent=2))
