from ..base import *
try:
    from ..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, 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)