data = {}


def setup():
    global data

    from .schema import Ship, Faction
    xwing = Ship(
        id='1',
        name='X-Wing',
    )

    ywing = Ship(
        id='2',
        name='Y-Wing',
    )

    awing = Ship(
        id='3',
        name='A-Wing',
    )

    # Yeah, technically it's Corellian. But it flew in the service of the rebels,
    # so for the purposes of this demo it's a rebel ship.
    falcon = Ship(
        id='4',
        name='Millenium Falcon',
    )

    homeOne = Ship(
        id='5',
        name='Home One',
    )

    tieFighter = Ship(
        id='6',
        name='TIE Fighter',
    )

    tieInterceptor = Ship(
        id='7',
        name='TIE Interceptor',
    )

    executor = Ship(
        id='8',
        name='Executor',
    )

    rebels = Faction(
        id='1',
        name='Alliance to Restore the Republic',
        ships=['1', '2', '3', '4', '5']
    )

    empire = Faction(
        id='2',
        name='Galactic Empire',
        ships=['6', '7', '8']
    )

    data = {
        'Faction': {
            '1': rebels,
            '2': empire
        },
        'Ship': {
            '1': xwing,
            '2': ywing,
            '3': awing,
            '4': falcon,
            '5': homeOne,
            '6': tieFighter,
            '7': tieInterceptor,
            '8': executor
        }
    }


def create_ship(ship_name, faction_id):
    from .schema import Ship
    next_ship = len(data['Ship'].keys()) + 1
    new_ship = Ship(
        id=str(next_ship),
        name=ship_name
    )
    data['Ship'][new_ship.id] = new_ship
    data['Faction'][faction_id].ships.append(new_ship.id)
    return new_ship


def get_ship(_id):
    return data['Ship'][_id]


def get_faction(_id):
    return data['Faction'][_id]


def get_rebels():
    return get_faction('1')


def get_empire():
    return get_faction('2')
