"""
    schemas: configuration sent to Autonomy Engine (i.e. during an emergency,
    if a platform needs to be removed from the mission planning)
"""
from . import api, message_header_schema, platform_schema
from flask_restx import fields


squad_metadata_schema = api.model(
    "SquadMetadataSchema",
    {
        "squad_ID": fields.Integer(
            required=True,
            description="platform serial number",
            example="ah-1",
        ),
        "no_of_platforms": fields.Integer(
            required=True,
            description="number of platform serial number",
            example="ah-1",
        ),
        "platforms": fields.List(
            fields.Nested(platform_schema),
            required=True,
            description="Metadata pf each platform",
        ),
        "squad_mission_type": fields.String(
            required=True,
            description="Survey or Detail",
            example="survey",
        ),
        "squad_state": fields.Boolean(
            required=True,
            description="True if given Squad is executing mission type "
            + "according to the Autonomy Engine plan",
            example=False,
        ),
    },
)

constraints_schema = api.model(
    "ConstraintsSchema",
    # TODO: Should this be per platform instead of squad?
    {
        "min_altitude": fields.Float(
            required=True,
            description="Minimum altitude set for squad.",
            example=15.2,
        ),
        "min_velocity": fields.Float(
            required=True,
            description="Minimum velocity set for squad.",
            example=0.1,
        ),
        "max_velocity": fields.Float(
            required=True,
            description="Maximum altitude set for squad.",
            example=0.9,
        ),
    },
)

environment_config_schema = api.model(  # TODO: Discuss how regions are defined
    "EnvironmentConfig",
    {
        "region_of_interest": fields.String(),
        "exclusion_zone": fields.String(),
    },
)
# Main Autonomy Configuration Schema
autonomy_configuration_schema = api.model(
    "SquadConfigurationSchema",
    {
        "message": fields.Nested(
            message_header_schema,
            required=True,
            description="Message header",
        ),
        "ID": fields.Integer(
            required=True,
            description="Unique identifier tagged to version of this"
            + " configuration plan",
            example=3,
        ),
        "time": fields.String(
            required=True,
            description="",
            example="",
        ),
        "squads": fields.Nested(
            squad_metadata_schema,
            required=False,
            description="Details of each squad",
        ),
        "environment": fields.Nested(
            environment_config_schema,
            required=False,
            description="Region of interest and exclusion zone",
        ),
    },
)