"""
Defines the DB entities.
"""

from pony.orm import Required, Optional, PrimaryKey, Set
from app import db


class City(db.Entity):
    city_id = PrimaryKey(str, auto=True)
    display_name = Optional(str)
    lat = Required(float)
    lon = Required(float)

    simulations = Set("Simulation")
    networks = Set("Network")


class Network(db.Entity):
    id = PrimaryKey(int, auto=True)
    name = Required(str)
    description = Optional(str)

    city = Required(City)

    plans = Set("Plan")

    east = Optional(float)
    west = Optional(float)
    north = Optional(float)
    south = Optional(float)

    done_osm_processing = Optional(bool)
    donematsim_processing = Optional(bool)
    conversion_error = Optional(str)


class Status:
    CREATED = 0
    RUNNING = 1
    FINISHED = 2
    ERROR = 3


class Simulation(db.Entity):
    id = PrimaryKey(int, auto=True)
    name = Required(str)
    description = Optional(str)

    city = Required(City)
    plan = Required("Plan")

    status = Optional(int)


class Plan(db.Entity):
    id = PrimaryKey(int, auto=True)
    name = Optional(str)

    simulation = Set(Simulation)
    network = Required(Network)