from marshmallow import Schema, fields, validate

from ..validators import validate_datetime_greater_than_now


class TermOfDefenceSchema(Schema):
    start_date = fields.DateTime(validate=validate_datetime_greater_than_now, required=True)
    end_date = fields.DateTime(validate=validate_datetime_greater_than_now, required=True)
    project_supervisors = fields.List(fields.Integer(required=True), validate=validate.Length(3, 3))


class ProjectSupervisorForTermOfDefenceSchema(Schema):
    id = fields.Str()
    first_name = fields.Str()
    last_name = fields.Str()


class TermOfDefenceItemSchema(Schema):
    start_date = fields.DateTime()
    end_date = fields.DateTime()
    members_of_committee = fields.List(fields.Nested(ProjectSupervisorForTermOfDefenceSchema))


class TermOfDefenceListSchema(Schema):
    term_of_defences = fields.List(fields.Nested(TermOfDefenceItemSchema))


class ProjectSupervisorForTemporaryAvailabilitySchema(Schema):
    id = fields.Str()
    first_name = fields.Str()
    last_name = fields.Str()


class TemporaryAvailabilityItemSchema(Schema):
    start_date = fields.DateTime()
    end_date = fields.DateTime()
    project_supervisor = fields.Nested(ProjectSupervisorForTemporaryAvailabilitySchema)


class TemporaryAvailabilityListSchema(Schema):
    temporary_availabilities = fields.List(fields.Nested(TemporaryAvailabilityItemSchema))