""" schema: platform-specific decoded status message (DRAFT) """ from . import message_header_schema, platform_schema, api from flask_restx import fields # TODO: Discuss nomenclature > platform or vehicle? gps_schema = api.model( "GPS", { "gps_source": fields.Float( # TODO: TBD with partners required=False, description="Source of gps position. E.g. Beacon", example="internal", ), "latitude_type": fields.String( required=False, description="", example="", ), "longitude_type": fields.String( required=False, description="", example="", ), "latitude": fields.Float( required=False, description="Latitude in ", example="", ), "longitude": fields.Float( required=False, description="Longitude in ", example="", ), "depth": fields.Float( required=False, description="", example="", ), "gps_fix_seconds_ago": fields.Float( required=False, description="", example="", ), }, ) platform_status_message_schema = api.model( "PlatformStatusMessage", { "message": fields.Nested( message_header_schema, required=True, description="Message header", ), "platform": fields.Nested(platform_schema), "time": fields.String( required=True, description="Timestamp of message", example="2022-11-16T00:00:00Z", ), "version": fields.Integer( required=False, description="", # we can track the version of the AE plan? example="", ), "platform_state": fields.String( # TODO: Define dictionary with potential STATES of each platform required=True, description="Current state executed by platform. E.g. " + "STOP, IDLE, ABORT.", example="IDLE", ), "mission_track_number": fields.Integer( required=False, description=( "Track number - stage in mission (e.g. " + "4 --> Waypoint 3 to Waypoint 4)" ), example=4, ), "range_to_go": fields.Float( required=False, description="Estimated distance to reach next waypoint", example=124.3, ), "c2_health_status": fields.String( required=False, description="Health status extracted by respective platform's C2 " + "if any diagnosis available checks on sensors", example="Warning", ), "gps_data": fields.Nested(gps_schema), "battery_voltage": fields.Float( required=True, description="Volts", example=23.0, ), "battery_current": fields.Float( required=False, description="Amps", example=1.2, ), "battery_current_per_hour": fields.Float( required=False, description="Amp-Hours", example=1.2, ), "battery_wattage": fields.Float( required=False, description="Watts", example=23.0, ), "battery_wattage_per_hour": fields.Float( required=False, description="Watt-Hours", example=23.0, ), }, ) # TBD: Do we append beacon positions with platform positions?