import csv
from io import TextIOWrapper


class DatFileLine:
    layout_class: str
    records: list[str]

    def __init__(self, dat_line: list[str]) -> None:
        self.layout_class = dat_line[0]
        self.records = dat_line


class DatFile:
    """アルトマークデータファイル"""

    lines: list[DatFileLine]
    success_count: int = 0
    error_count: int = 0
    total_count: int = 0
    __i: int = 0

    def __iter__(self):
        return self

    def __next__(self) -> DatFileLine:
        if self.__i == len(self.lines):
            raise StopIteration()
        line = self.lines[self.__i]
        self.__i += 1
        return line

    def __init__(self, file: TextIOWrapper) -> None:
        reader = csv.reader(file)
        csv_rows = [DatFileLine(row) for row in reader]

        self.lines = csv_rows
        self.total_count = len(csv_rows)

    def count_up_success(self):
        self.success_count += 1

    def count_up_error(self):
        self.error_count += 1

    @classmethod
    def from_path(cls, local_file_path: str):
        """アルトマークデータファイルを読み込み、新しいインスタンスを作成する

        Args:
            local_file_path (str): ローカルのファイルパス

        Returns:
            DatFile: このクラスのインスタンス
        """
        # cp932(Shift-JIS Windows拡張)でファイルを読み込む
        file = open(local_file_path, encoding='cp932')
        instance = cls(file)
        file.close()
        return instance
