from ..base import *


@Js
def Array():
    if len(arguments) == 0 or len(arguments) > 1:
        return arguments.to_list()
    a = arguments[0]
    if isinstance(a, PyJsNumber):
        length = a.to_uint32()
        if length != a.value:
            raise MakeError('RangeError', 'Invalid array length')
        temp = Js([])
        temp.put('length', a)
        return temp
    return [a]


Array.create = Array
Array.own['length']['value'] = Js(1)


@Js
def isArray(arg):
    return arg.Class == 'Array'


Array.define_own_property('isArray', {
    'value': isArray,
    'enumerable': False,
    'writable': True,
    'configurable': True
})

Array.define_own_property(
    'prototype', {
        'value': ArrayPrototype,
        'enumerable': False,
        'writable': False,
        'configurable': False
    })

ArrayPrototype.define_own_property('constructor', {
    'value': Array,
    'enumerable': False,
    'writable': True,
    'configurable': True
})