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


def main(problem, controller_name, **kwargs):
    print kwargs

    from cpp import virtualmachine
    vm = virtualmachine()
    print 'binaries/bin%s.obf' % problem[0]
    vm.load('binaries/bin%s.obf' % problem[0])

    vm.input[0x3e80] = float(problem)

    module = __import__('.'.join(controller_name.split('.')[:-1]))
    for m in controller_name.split('.')[1:-1]:
        module = getattr(module, m)
    controller = getattr(module, controller_name.split('.')[-1])()

    if kwargs.has_key('d'):
        from visualiser import Visualiser
        visualiser = Visualiser((500, 500))
    else:
        visualiser = None

    t = 0
    for ports in vm:
        port_values = [vm.port[p] for p in range(0,5)]
        score, fuel_remaining, x, y, target_orbit_radius = port_values
        
        if score:
            vm.vm.save("%s_%s.ocf" % (problem,controller_name))
            print "Exiting on a winning score of:%s!!!" % score
            break

        if visualiser:
            visualiser.visualise(t, score, fuel_remaining, x, y, target_orbit_radius)
            visualiser.log(t, score, fuel_remaining, x, y, target_orbit_radius)

        values = controller(t, *port_values)
        if values is not None:
            for input_port, value in values.items():
                print values
                vm.input[input_port] = value

        t += 1
