from models import Cell, Maze
from .maze_builder import MazeBuilder

class TextFileMazeBuilder(MazeBuilder):
    """Строитель лабиринта из текстового файла"""
    
    def build_from_file(self, filename: str) -> Maze:
        """Читает файл и строит лабиринт"""
        with open(filename, 'r', encoding='utf-8') as f:
            lines = [line.rstrip('\n') for line in f.readlines()]
        
        height = len(lines)
        width = len(lines[0]) if height > 0 else 0
        
        maze = Maze(width, height)
        
        for y, line in enumerate(lines):
            for x, char in enumerate(line):
                is_wall = (char == '#')
                is_start = (char == 'S')
                is_exit = (char == 'E')
                
                cell = Cell(x, y, is_wall, is_start, is_exit)
                maze.set_cell(x, y, cell)
                
                if is_start:
                    maze.start = cell
                if is_exit:
                    maze.exit = cell
        
        # Валидация
        if maze.start is None:
            raise ValueError("В лабиринте нет стартовой клетки (S)")
        if maze.exit is None:
            raise ValueError("В лабиринте нет выходной клетки (E)")
        
        return maze