"""
Необходимо создать 3 класса и взаимосвязь между ними (Student, Teacher,
Homework)
Наследование в этой задаче использовать не нужно.
Для работы с временем использовать модуль datetime
1. Homework принимает на вход 2 атрибута: текст задания и количество дней
на это задание
Атрибуты:
    text - текст задания
    deadline - хранит объект datetime.timedelta с количеством
    дней на выполнение
    created - c точной датой и временем создания
Методы:
    is_active - проверяет не истекло ли время на выполнение задания,
    возвращает boolean
2. Student
Атрибуты:
    last_name
    first_name
Методы:
    do_homework - принимает объект Homework и возвращает его же,
    если задание уже просрочено, то печатет 'You are late' и возвращает None
3. Teacher
Атрибуты:
     last_name
     first_name
Методы:
    create_homework - текст задания и количество дней на это задание,
    возвращает экземпляр Homework
    Обратите внимание, что для работы этого метода не требуется сам объект.
PEP8 соблюдать строго.
Всем перечисленным выше атрибутам и методам классов сохранить названия.
К названием остальных переменных, классов и тд. подходить ответственно -
давать логичные подходящие имена.
"""
import datetime


class Homework:
    """Класс реализует домашнее задание созданное классом Teacher
    для класса Student

    :param text: текст задания
    :type text: str
    :param created: время создания задания
    :type created: datetime.datetime
    :param deadline: предельная дата выполнения
    :type deadline: datetime.timedelta
    """

    def __init__(self, text: str, time: int):
        """Конструктор класса

        :param text: текст задания
        :type text: str
        :param time: Время выполнения в днях
        :type time: int
        """
        self.text = text
        self.created = datetime.datetime.now()
        self.deadline = datetime.timedelta(days=time)

    def is_active(self):
        """Проверка срока задания

        :return:True, если время выполнения не истекло, False иначе
        :rtype: bool
        """
        return datetime.datetime.now() < self.deadline + self.created


class Teacher:
    """Класс реализует учителя для создания домашнего задания в виде класса
    Homework

    :param first_name: Имя учителя
    :type first_name: str
    :param last_name: Фамилия учителя
    :type last_name: str
    """
    def __init__(self, first_name, last_name):
        """Конструктор класса
        """
        self.first_name = first_name
        self.last_name = last_name

    @staticmethod
    def create_homework(text, time):
        """Метод, реализующий создание домашнего задания

        :param text: текст задания
        :type text: str
        :param time: Время выполнения в днях
        :type time: int
        :return: Домашнее задание с параметрами text, time
        :rtype: Homework
        """
        return Homework(text, time)


class Student:
    """Класс  реализует студента, выполняющего домашнюю работу

    :param first_name: Имя учителя
    :type first_name: str
    :param last_name: Фамилия учителя
    :type last_name: str
    """
    def __init__(self, first_name, last_name):
        """Конструктор класса
        """
        self.first_name = first_name
        self.last_name = last_name

    def do_homework(self, homework):
        """Метод, реализующий выполнение домашнего задания

        :param homework: Домашняя работа, которую выполняет студент
        :return: Домашняя работа, выполненная студентом или ничего если
        работа просрочена
        :rtype: Homework или None
        """
        if homework.is_active():
            return homework
        else:
            print("You are too late")


if __name__ == '__main__':
    teacher = Teacher('Daniil', 'Shadrin')
    student = Student('Roman', 'Petrov')
    print(teacher.last_name)  # Shadrin
    print(student.first_name)  # Roman

    expired_homework = Teacher.create_homework('Learn functions', 0)
    print(expired_homework.created)  # Example: 2019-05-26 16:44:30.688762
    print(expired_homework.deadline)  # 0:00:00
    print(expired_homework.text)  # 'Learn functions'

    # create function from method and use it
    create_homework_too = teacher.create_homework
    oop_homework = create_homework_too('create 2 simple classes', 5)
    print(oop_homework.deadline)  # 5 days, 0:00:00

    student.do_homework(oop_homework)
    student.do_homework(expired_homework)  # You are late
