"""Synthetic independent2x sessions; not behaviour or casino records.

Requires staking_models.py beside this file. Start200 betting units, worth5
currency units each; flat stake1, at most3000 opportunities, no deposits,
fees or profit stops. Fully fund every wager; zero is absorbing. All1000
sessions remain in statistics, including stopped paths. Seed20261023.
"""
import json
import logging
import random
from statistics import median
from staking_models import run_path


def simulate():
    rng=random.Random(20261023)
    milestones=[];examples=[];finals=[]
    for session in range(1,1001):
        outcomes=[rng.random()<.485 for _ in range(3000)]
        result=run_path(outcomes,initial=200,base=1,cap=1,strategy='flat',
                        milestones=(200,800,1000,2000,3000),ledger=session<=3)
        final=result['final'];finals.append(final)
        for opportunity,state in result['milestones'].items():
            milestones.append(dict(session=session,opportunity=opportunity,
                wagers=state['executed'],turnoverCents=state['turnover']*500,
                grossCents=state['gross']*500,balanceCents=state['balance']*500,
                stopped=int(state['blocked'] is not None)))
        for row in result['ledger']:
            examples.append(dict(session=session,opportunity=row['opportunity'],
                beforeCents=row['balanceBefore']*500,stakeCents=row['stake']*500,
                won=int(row['won']),grossCents=row['gross']*500,afterCents=row['balanceAfter']*500))
    turn=sum(x['turnover'] for x in finals)*5;gross=sum(x['gross'] for x in finals)*5
    balance=sum(x['balance'] for x in finals)*5
    assert balance==1000*1000+gross-turn
    summary=dict(scope='Synthetic independent2x model, not casino data or behavioural types',
        seed=20261023,sessions=1000,horizon=3000,initialCurrency=1000,stakeCurrency=5,
        stopped=sum(x['blocked'] is not None for x in finals),zero=sum(x['balance']==0 for x in finals),
        profitable=sum(x['balance']>200 for x in finals),meanFinal=balance/1000,
        medianFinal=median(x['balance']*5 for x in finals),meanTurnover=turn/1000,
        totalTurnover=turn,totalGross=gross,totalFinal=balance,
        realisedRTP=gross/turn)
    return dict(summary=summary,milestones=milestones,examples=examples)


if __name__=='__main__':
    logging.basicConfig(level=logging.INFO,format='%(message)s')
    logging.info(json.dumps(simulate()['summary'],indent=2))
