"""Реализация класса File с магическими методами"""

from os.path import join
from tempfile import gettempdir


class File:
    """Класс для работы с файлами"""

    def __init__(self, file_path: "str"):
        """Конструктор базового класса"""

        self.file_path: "str" = file_path
        self.current_position: "int" = 0

    def write(self, line: "str") -> None:
        """Запись строки в файл"""

        with open(self.file_path, "w", encoding="utf-8") as des:
            des.write(line)

    def read(self) -> "str":
        """Чтение файла"""

        try:
            with open(self.file_path, encoding="utf-8") as des:
                content: "str" = des.read()

        except IOError:
            content = ""

        return content

    def __add__(self, obj: "File") -> "File":
        """Сложение двух объектов"""

        new_file = type(self)(join(gettempdir(), "temp.txt"))
        new_file.write(self.read() + obj.read())

        return new_file

    def __str__(self) -> "str":
        """Строковое представление объекта"""

        return self.file_path

    def __iter__(self) -> "File":
        """Метод возращающий итератор"""

        return self

    def __next__(self) -> "str":
        with open(self.file_path, "r", encoding="utf-8") as des:
            des.seek(self.current_position)

            line: "str" = des.readline()

            if not line:
                self.current_position = 0
                raise StopIteration("EOF")

            self.current_position = des.tell()

            return line
