class Platform(Base):
    __tablename__ = 'Platforms'
    tabletype = TableTypes.METADATA

    # These only needed for tables referenced by Entry table
    tabletypeId = 1
    tableName = 'Platforms'

    platform_id = Column(UUID(), primary_key=True, default=uuid.uuid4)
    # TODO: does this, or other string limits need checking or validating on file import?
    name = Column(String(150))
    platformtype_id = Column(UUID(), nullable=False)
    host_platform_id = Column(UUID())
    nationality_id = Column(UUID(), nullable=False)
class Datafile(Base):
    __tablename__ = 'Datafiles'
    tabletype = TableTypes.METADATA

    # These only needed for tables referenced by Entry table
    tabletypeId = 4
    tableName = 'Datafiles'

    datafile_id = Column(UUID(), primary_key=True, default=uuid.uuid4)
    # TODO: does this, or other string limits need checking or validating on file import?
    simulated = Column(Boolean)
    reference = Column(String(150))
    url = Column(String(150))
    privacy_id = Column(UUID(), nullable=False)
    datafiletype_id = Column(UUID(), nullable=False)
class DatafileType(Base):
    __tablename__ = 'DatafileTypes'
    tabletype = TableTypes.REFERENCE

    datafiletype_id = Column(UUID(), primary_key=True, default=uuid.uuid4)
    # TODO: does this, or other string limits need checking or validating on file import?
    name = Column(String(150), nullable=False)
class Entry(Base):
    __tablename__ = 'Entry'
    tabletype = TableTypes.METADATA

    entry_id = Column(UUID(), primary_key=True, default=uuid.uuid4)
    tabletype_id = Column(Integer, nullable=False)
    created_user = Column(Integer)
class State(Base):
    __tablename__ = 'State'
    tabletype = TableTypes.MEASUREMENT

    # These only needed for tables referenced by Entry table
    tabletypeId = 3
    tableName = 'State'

    state_id = Column(UUID(), primary_key=True, default=uuid.uuid4)
    time = Column(DATETIME, nullable=False)
    sensor_id = Column(UUID(), nullable=False)
    # location = Column(Geometry(geometry_type='POINT', srid=4326))
    location = Column(String(150), nullable=False)
    heading = Column(REAL)
    course = Column(REAL)
    speed = Column(REAL)
    datafile_id = Column(UUID(), nullable=False)
    privacy_id = Column(UUID())
class Sensor(Base):
    __tablename__ = 'Sensors'
    tabletype = TableTypes.METADATA

    # These only needed for tables referenced by Entry table
    tabletypeId = 2
    tableName = 'Sensor'

    sensor_id = Column(UUID(), primary_key=True, default=uuid.uuid4)
    name = Column(String(150), nullable=False)
    sensortype_id = Column(UUID, nullable=False)
    platform_id = Column(UUID, nullable=False)
class Privacy(Base):
    __tablename__ = 'Privacies'
    tabletype = TableTypes.REFERENCE

    privacy_id = Column(UUID(), primary_key=True, default=uuid.uuid4)
    name = Column(String(150), nullable=False)
class Nationality(Base):
    __tablename__ = 'Nationalities'
    tabletype = TableTypes.REFERENCE

    nationality_id = Column(UUID(), primary_key=True, default=uuid.uuid4)
    name = Column(String(150), nullable=False)