# -*- coding: utf-8 -*-

from visualiser import Visualiser

def run_simulation( simulation, configuration, controller, max = 0 ):
    simulation.input[0x3e80] = configuration
    t = 0
    for ports in simulation:
        port_values = [simulation.port[p] for p in range(0, controller.port_count)]

        if controller:
            values = controller(t, *port_values)
            if values is not None:
                for input_port, value in values.items():
                    simulation.input[input_port] = value
        
        score = port_values[0]
        if score:
            return score
        t += 1

        if max and t > max:
            return -1.0
