from src.model.cell import Cell
from src.model.maze import Maze

class TextFileMazeBuilder:
    def build_from_file(self, filename):
        with open(filename, "r", encoding="utf-8") as f:
            lines = [line.rstrip("\n") for line in f]

        height = len(lines)
        width = max(len(line) for line in lines)

        cells = []
        start = None
        exit_ = None

        for y, line in enumerate(lines):
            row = []
            for x, ch in enumerate(line.ljust(width)):
                is_wall = (ch == "#")
                is_start = (ch == "S")
                is_exit = (ch == "E")

                cell = Cell(x, y, is_wall, is_start, is_exit)
                row.append(cell)

                if is_start:
                    start = cell
                if is_exit:
                    exit_ = cell

            cells.append(row)

        if start is None:
            raise ValueError("Файл должен содержать S (старт)")

        return Maze(width, height, cells, start, exit_)