# hack to return special attributes
from _sys import *

_getframe = Getframe
from javascript import JSObject
from browser import window

brython_debug_mode = __BRYTHON__.debug

base_exec_prefix = __BRYTHON__.brython_path

base_prefix = __BRYTHON__.brython_path

builtin_module_names=__BRYTHON__.builtin_module_names

byteorder='little'

def exc_info():
    exc = __BRYTHON__.current_exception
    if exc is None:
        return(None, None, None)
    return (exc.__class__,exc,exc.traceback)
    
exec_prefix = __BRYTHON__.brython_path

executable = __BRYTHON__.brython_path+'/brython.js'

def exit(i=None):
    raise SystemExit('')

class flag_class:
  def __init__(self):
      self.debug=0
      self.inspect=0
      self.interactive=0
      self.optimize=0
      self.dont_write_bytecode=0
      self.no_user_site=0
      self.no_site=0
      self.ignore_environment=0
      self.verbose=0
      self.bytes_warning=0
      self.quiet=0
      self.hash_randomization=1

flags=flag_class()

def getfilesystemencoding(*args,**kw):
    """getfilesystemencoding() -> string    
    Return the encoding used to convert Unicode filenames in
    operating system filenames."""
    return 'utf-8'

def getrecursionlimit():
    return 200

maxsize=2**63-1

maxunicode=1114111

# Imported from _sys
# path = __BRYTHON__.path
# #path_hooks = list(JSObject(__BRYTHON__.path_hooks))
# meta_path=__BRYTHON__.meta_path

platform = "brython"

prefix = __BRYTHON__.brython_path

version = '.'.join(str(x) for x in __BRYTHON__.version_info[:3])
version += " (default, %s) \n[Javascript 1.5] on Brython" % __BRYTHON__.compiled_date
hexversion = 0x03000000   # python 3.0

class __version_info(object):
    def __init__(self, version_info):
        self.version_info = version_info
        self.major = version_info[0]
        self.minor = version_info[1]
        self.micro = version_info[2]
        self.releaselevel = version_info[3]
        self.serial = version_info[4]

    def __getitem__(self, index):
        if isinstance(self.version_info[index], list):
           return tuple(self.version_info[index])
        return self.version_info[index]

    def hexversion(self):
        try:
          return '0%d0%d0%d' % (self.major, self.minor, self.micro)
        finally:  #probably some invalid char in minor (rc, etc)
          return '0%d0000' % (self.major)

    def __str__(self):
        _s="sys.version(major=%d, minor=%d, micro=%d, releaselevel='%s', serial=%d)"
        return _s % (self.major, self.minor, self.micro, 
                     self.releaselevel, self.serial)
        #return str(self.version_info)

    def __eq__(self,other):
        if isinstance(other, tuple):
           return (self.major, self.minor, self.micro) == other

        raise Error("Error! I don't know how to compare!")

    def __ge__(self,other):
        if isinstance(other, tuple):
           return (self.major, self.minor, self.micro) >= other

        raise Error("Error! I don't know how to compare!")

    def __gt__(self,other):
        if isinstance(other, tuple):
           return (self.major, self.minor, self.micro) > other

        raise Error("Error! I don't know how to compare!")

    def __le__(self,other):
        if isinstance(other, tuple):
           return (self.major, self.minor, self.micro) <= other

        raise Error("Error! I don't know how to compare!")

    def __lt__(self,other):
        if isinstance(other, tuple):
           return (self.major, self.minor, self.micro) < other

        raise Error("Error! I don't know how to compare!")

    def __ne__(self,other):
        if isinstance(other, tuple):
           return (self.major, self.minor, self.micro) != other

        raise Error("Error! I don't know how to compare!")


#eventually this needs to be the real python version such as 3.0, 3.1, etc
version_info=__version_info(__BRYTHON__.version_info)

class _implementation:
  def __init__(self):
      self.name='brython'
      self.version = __version_info(__BRYTHON__.implementation)
      self.hexversion = self.version.hexversion()
      self.cache_tag=None

  def __repr__(self):
      return "namespace(name='%s' version=%s hexversion='%s')" % (self.name, self.version, self.hexversion)

  def __str__(self):
      return "namespace(name='%s' version=%s hexversion='%s')" % (self.name, self.version, self.hexversion)

implementation=_implementation()

class _hash_info:
  def __init__(self):
      self.width=32, 
      self.modulus=2147483647
      self.inf=314159 
      self.nan=0
      self.imag=1000003
      self.algorithm='siphash24' 
      self.hash_bits=64 
      self.seed_bits=128 
      cutoff=0

  def __repr(self):
      #fix me
      return "sys.hash_info(width=32, modulus=2147483647, inf=314159, nan=0, imag=1000003, algorithm='siphash24', hash_bits=64, seed_bits=128, cutoff=0)"

hash_info=_hash_info()

warnoptions=[]

def getfilesystemencoding():
    return 'utf-8'

## __stdxxx__ contains the original values of sys.stdxxx
__stdout__ = __BRYTHON__.stdout
__stderr__ = __BRYTHON__.stderr
__stdin__ = __BRYTHON__.stdin

#delete objects not in python sys module namespace
del JSObject
del _implementation
