"""Учебная ресурсная модель. Запуск: python3 model.py. Внешних данных нет."""
import csv
from pathlib import Path

def simulate(horizon, cost=6, gain=2, invest=False):
    stock = 10
    if invest:
        if stock < cost:
            raise ValueError('Начальный запас не позволяет инвестировать')
        stock -= cost
    for _ in range(horizon):
        stock += 1 + (gain if invest else 0)
    return stock

def main():
    out = Path(__file__).parent
    rows = []
    for h in range(1, 7):
        keep, invest = simulate(h), simulate(h, invest=True)
        assert invest - keep == 2*h - 6
        rows.append([h, keep, invest, invest-keep])
    assert rows[2] == [3, 13, 13, 0]
    with (out/'horizons.csv').open('w') as f:
        csv.writer(f, lineterminator='\n').writerows([['horizon','keep','invest','difference'], *rows])
    sensitivity=[]
    for cost in (4,6,8):
        for gain in (1,2,3):
            threshold=next(h for h in range(1,20) if simulate(h,cost,gain,True)>simulate(h,cost,gain))
            assert threshold == cost//gain+1
            assert simulate(threshold-1,cost,gain,True)<=simulate(threshold-1,cost,gain)
            sensitivity.append([cost,gain,threshold])
    with (out/'sensitivity.csv').open('w') as f:
        csv.writer(f, lineterminator='\n').writerows([['cost','gain','first_strictly_better_horizon'],*sensitivity])
    print('Проверены 6 горизонтов и 9 сочетаний параметров. Таблицы сохранены рядом со скриптом.')

if __name__ == '__main__':
    main()
