

from visualiser import Visualiser
from math import sqrt

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
        chimp.sum_distance = 1.0
        chimp.t = 0
        
    def __call__(chimp, t, score, fuel_remaining, x, y, target_orbit_radius):
        chimp.sum_distance += abs(target_orbit_radius - sqrt((x*x) + (y*y)))
        chimp.t = t
        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)
