from js2py.base import *
try:
    from js2py.translators.translator import translate_js
except:
    pass


@Js
def Function():
    # convert arguments to python list of strings
    a = [e.to_string().value for e in arguments.to_list()]
    body = ';'
    args = ()
    if len(a):
        body = '%s;' % a[-1]
        args = a[:-1]
    # translate this function to js inline function
    js_func = '(function (%s) {%s})' % (','.join(args), body)
    # now translate js inline to python function
    py_func =  translate_js(js_func, '')
    # add set func scope to global scope
    # a but messy solution but works :)
    globals()['var'] = PyJs.GlobalObject
    # define py function and return it
    temp = executor(py_func, globals())
    temp.source = '{%s}'%body
    temp.func_name = 'anonymous'
    return temp

def executor(f, glob):
    exec f in globals()
    return globals()['PyJs_anonymous_0_']


#new statement simply calls Function
Function.create = Function

#set constructor property inside FunctionPrototype

fill_in_props(FunctionPrototype, {'constructor':Function}, default_attrs)

#attach prototype to Function constructor
Function.define_own_property('prototype', {'value': FunctionPrototype,
                                         'enumerable': False,
                                         'writable': False,
                                         'configurable': False})
#Fix Function length (its 0 and should be 1)
Function.own['length']['value'] = Js(1)

