

from visualiser import Visualiser

class QuietChimpanzee(object):
    def __init__(chimp, *instructions):
        flight_plan = instructions.__iter__()
        chimp.flight_plan = flight_plan
        
        time, values = chimp.flight_plan.next()
        chimp.next_instruction_time = time
        chimp.next_values = values
        
    def __call__(chimp, t, score, fuel_remaining, x, y, target_orbit_radius):
        if t == chimp.next_instruction_time:
            result = chimp.next_values
            try:
                time, values = chimp.flight_plan.next()
                chimp.next_instruction_time = time
                chimp.next_values = values                
                return result
            except StopIteration:
                chimp.__call__ = lambda *a,**k: None
                chimp.next_values = None
                return result


class Chimpanzee(QuietChimpanzee):
    def __init__(chimp, *instructions):
        super(Chimpanzee, chimp).__init__(*instructions)        
        chimp.visualiser = Visualiser((500, 500))
        
    def __call__(chimp, t, score, fuel_remaining, x, y, target_orbit_radius):
        chimp.visualiser.visualise(t, score, fuel_remaining, x, y, target_orbit_radius)
        chimp.visualiser.log(t, score, fuel_remaining, x, y, target_orbit_radius)        
        return super(Chimpanzee, chimp).__call__(t, score, fuel_remaining, x, y, target_orbit_radius)
