#!/usr/bin/env python
import PySimpleGUI as sg
import random
import sys

'''
    Example of random line in Graph element.
'''

sg.theme('black')

STEP_SIZE = 1
SAMPLES = 300
SAMPLE_MAX = 300
CANVAS_SIZE = (300, 300)


def main():
    global g_exit, g_response_time

    layout = [[sg.Text('Enter width, height of graph')],
              [sg.Input(300, size=(6, 1), key='w'), sg.Input(300, size=(6, 1), key='h')],
              [sg.Ok(), sg.Cancel()]]

    window = sg.Window('Enter graph size', layout)
    event, values = window.read()
    if event is None or event == 'Cancel':
        return

    CANVAS_SIZE = int(values['w']), int(values['h'])
    window.close()

    # start ping measurement thread

    sg.theme('Black')
    sg.set_options(element_padding=(0, 0))

    layout = [[sg.Button('Quit', button_color=('white', 'black'))],
              [sg.Graph(CANVAS_SIZE, (0, 0), (SAMPLES, SAMPLE_MAX),
                        background_color='black', key='graph')], ]

    window = sg.Window('Canvas test', layout, grab_anywhere=True,
                       background_color='black', no_titlebar=False,
                       use_default_focus=False, finalize=True)
    graph = window['graph']     # type:sg.Graph

    graph.draw_line((SAMPLES//2, 0), (SAMPLES//2,SAMPLE_MAX),color='white')
    graph.draw_line((0,SAMPLE_MAX//2), (SAMPLES, SAMPLE_MAX//2),color='white')

    prev_response_time = None
    i = 0
    prev_x, prev_y = 0, 0
    graph_value = 250
    figures = []
    while True:
        event, values = window.read(timeout=0)
        if event == 'Quit' or event is None:
            break

        graph_offset = random.randint(-10, 10)
        graph_value = graph_value + graph_offset

        if graph_value > SAMPLE_MAX:
            graph_value = SAMPLE_MAX
        if graph_value < 0:
            graph_value = 0

        new_x, new_y = i, graph_value
        prev_value = graph_value

        if i >= SAMPLES:
            graph.delete_figure(figures[0])
            figures = figures[1:]
            for count, figure in enumerate(figures):
                graph.move_figure(figure, -STEP_SIZE, 0)
            prev_x = prev_x - STEP_SIZE

        last_figure = graph.draw_line((prev_x, prev_y), (new_x, new_y), color='white')
        figures.append(last_figure)
        prev_x, prev_y = new_x, new_y
        i += STEP_SIZE if i < SAMPLES else 0

    window.close()


if __name__ == '__main__':
    main()
