__all__ = ('set_options', 'add_options', 'get_options',
           'set_classpath', 'add_classpath', 'get_classpath',
           'expand_classpath')

import platform
if platform.system() == 'Windows':
    split_char = ';'
else:
    split_char = ':'

vm_running = False
options = []
classpath = None

def set_options(*opts):
    "Sets the list of options to the JVM. Removes any previously set options."
    if vm_running:
        raise ValueError("VM is already running, can't set options")
    globals()['options'] = opts

def add_options(*opts):
    "Appends options to the list of VM options."
    if vm_running:
        raise ValueError("VM is already running, can't set options")
    global options
    options.extend(opts)

def get_options():
    "Retrieves the current list of VM options."
    global options
    return list(options)


def set_classpath(*path):
    """
    Sets the classpath for the JVM to use. Replaces any existing classpath, overriding the CLASSPATH environment variable.
    """
    if vm_running:
        raise ValueError("VM is already running, can't set classpath")
    global classpath
    classpath = path

def add_classpath(*path):
    """
    Appends items to the classpath for the JVM to use.
    Replaces any existing classpath, overriding the CLASSPATH environment variable.
    """
    if vm_running:
        raise ValueError("VM is already running, can't set classpath")
    global classpath
    if classpath is None:
        classpath = list(path)
    else:
        classpath.extend(path)

def get_classpath():
    "Retrieves the classpath the JVM will use."
    from os import environ
    from os.path import realpath
    global classpath

    if classpath is not None:
        return list(classpath)

    if 'CLASSPATH' in environ:
        return environ['CLASSPATH'].split(split_char)

    return [realpath('.')]

def expand_classpath():
    from glob import glob
    paths = []
    # deal with wildcards
    for path in get_classpath():
        if not path.endswith('*'):
            paths.append(path)
        else:
            paths.extend(glob(path + '.[Jj][Aa][Rr]'))
    return split_char.join(paths)
