from strategies.pathfinding_strategy import PathFindingStrategy


class DFSStrategy(PathFindingStrategy):
    def find_path(self, maze, start_cell, exit_cell):
        stack = [start_cell]
        parents = {start_cell: None}
        visited = {start_cell}
        visited_count = 0

        while stack:
            current = stack.pop()
            visited_count += 1

            if current == exit_cell:
                path = []
                while current is not None:
                    path.append(current)
                    current = parents[current]
                path.reverse()
                return path, visited_count

            for neighbor in maze.get_neighbors(current):
                if neighbor in visited:
                    continue
                visited.add(neighbor)
                parents[neighbor] = current
                stack.append(neighbor)

        return [], visited_count