from collections import namedtuple

Ship = namedtuple('Ship', ['id', 'name'])
Faction = namedtuple('Faction', ['id', 'name', 'ships'])

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 createShip(shipName, factionId):
    nextShip = len(data['Ship'].keys())+1
    newShip = Ship(
        id=str(nextShip),
        name=shipName
    )
    data['Ship'][newShip.id] = newShip
    data['Faction'][factionId].ships.append(newShip.id)
    return newShip


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


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


def getRebels():
    return rebels


def getEmpire():
    return empire
