import pygame, sys
import random
from neurodot_present.present_lib import Screen, FixationCross, CheckerBoardFlasher, bell, UserEscape, run_start_sequence, run_stop_sequence



pygame.init()

TASK_DURATION = 30  #seconds

FC = FixationCross()
try:
    #start sequence
    run_start_sequence()
    #setup task
    CBF = CheckerBoardFlasher(flash_rate=0) #no flashing
    CBF.setup_checkerboard(64)
    black_SCR = Screen(color = "black",fixation_cross = FC)
    #run sequence
    CBF.run(duration = TASK_DURATION, vsync_value = 1)
    black_SCR.run(duration = 1, vsync_value = 0)
    bell()
    black_SCR.run(duration = 5, vsync_value = 0)
    black_SCR.run(duration = TASK_DURATION, vsync_value = 2)
    black_SCR.run(duration = 1, vsync_value = 0)
    bell()
except UserEscape:
    print "User stopped the sequence"
except Exception, err:
    raise err
finally:
    FLASH_DURATION = 8       #seconds
    PAUSE_DURATION_RANGE = (2.0,5.0)

    FC = FixationCross()

    #CBFs

    try:
        #start sequence
        run_start_sequence()
        #trials
        for b in range(BLOCKS):
            stims = REPITITIONS*zip(FLASH_RATES, VSYNC_VALUES)
            random.shuffle(stims)
            for flash_rate, vsync_value in stims:
                CBF = CheckerBoardFlasher(flash_rate=flash_rate)
                CBF.setup_checkerboard(nrows = CHECKERBOARD_NROWS, show_fixation_dot = True)
                CBF.run(duration = FLASH_DURATION, vsync_value = vsync_value)
                SCR = Screen(color = "black", fixation_cross = FC)
                pause_duration = random.uniform(*PAUSE_DURATION_RANGE)
                SCR.run(duration = pause_duration, vsync_value = 0)
    except UserEscape as exc:
        print exc
    finally:
        #stop sequence
        run_stop_sequence()
    #exit
    print "Exiting the presentation"
    pygame.quit()
    sys.exit()