from marshmallow import fields, validate, Schema

from ..validators import validate_datetime_greater_than_now


class ExaminationScheduleSchema(Schema):
    title = fields.Str(validate=validate.Length(min=1, max=100), required=True)
    mode = fields.Boolean(required=True)


class ExaminationScheduleUpdateSchema(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)


class ExaminationScheduleListItemSchema(Schema):
    id = fields.Integer(required=True)
    title = fields.Str(validate=validate.Length(min=1, max=100), required=True)
    mode = fields.Boolean(required=True)
    start_date = fields.DateTime(validate=validate_datetime_greater_than_now, required=True)
    end_date = fields.DateTime(validate=validate_datetime_greater_than_now, required=True)


class ExaminationSchedulesPaginationSchema(Schema):
    examination_schedules = fields.List(fields.Nested(ExaminationScheduleListItemSchema))
    max_pages = fields.Integer()


class ExaminationSchedulesQuerySchema(Schema):
    page = fields.Integer()
    per_page = fields.Integer()


class ProjectSupervisorStatisticsSchema(Schema):
    full_name = fields.Str()
    assigned_to_committee = fields.Integer()
    groups_assigned_to_his_committee = fields.Integer()


class WorkloadSchema(Schema):
    workloads = fields.List(fields.Nested(ProjectSupervisorStatisticsSchema))