import numpy as np

import pyqtgraph as pg
from pyqtgraph.Qt import QtCore


initial_dollar = 100

factor_if_heads = 1.8
factor_if_tails = 0.5

population_size = 10000
num_tosses_visualized = 500

def want_to_play(money, toss) -> bool:
    return True
    if toss > 4:
        return False

rng = np.random.default_rng(seed=4)

def evolve(want_to_play, money, toss):
    # if money < 2:
    #     return 1
    # if not want_to_play(money, toss):
    #     return money

    if rng.choice([0,1]):
        return money * factor_if_heads
    else:
        return money * factor_if_tails

population_histories = [[initial_dollar] for _ in range(population_size)]
for toss in range(num_tosses_visualized):
    for hist in population_histories:
        hist.append(evolve(want_to_play, hist[-1], toss))


app = pg.mkQApp("Plotting Example")
#mw = QtWidgets.QMainWindow()
#mw.resize(800,800)

win = pg.GraphicsLayoutWidget(show=True, title="Basic plotting examples")
win.resize(1000,600)
win.setWindowTitle('pyqtgraph example: Plotting')

# Enable antialiasing for prettier plots
pg.setConfigOptions(antialias=True)

p2 = win.addPlot(title="Multiple curves")


population_histories = np.array(population_histories)
# population_histories = np.log(population_histories + 1)
p2.setLogMode(False, True)
p2.plot(population_histories.mean(0), pen=(255, 0, 0))
p2.plot(np.median(population_histories, 0), pen=(0, 255, 0))
for percentile in range(0, 101):
    print('percentile', percentile)
    p2.plot(np.percentile(population_histories, percentile, 0), pen=(100, 10, 0))

# for hist in population_histories:
#     p2.plot(hist, pen=(33,33,33))

# p2.plot(np.random.normal(size=100), pen=(255,0,0), name="Red curve")
# p2.plot(np.random.normal(size=110)+5, pen=(0,255,0), name="Green curve")
# p2.plot(np.random.normal(size=120)+10, pen=(0,0,255), name="Blue curve")


if __name__ == '__main__':
    pg.exec()
