from src.maze_builder import TextFileMazeBuilder
from src.pathfinding import BFSStrategy, DFSStrategy, AStarStrategy, DijkstraStrategy
from src.maze_solver import MazeSolver

# Загружаем лабиринт
builder = TextFileMazeBuilder()
maze = builder.build_from_file("demo_maze.txt")

print("Лабиринт:")
print(maze)
print(f"\nСтарт: ({maze.start.x}, {maze.start.y})")
print(f"Выход: ({maze.exit.x}, {maze.exit.y})")

# Создаём solver без стратегии
solver = MazeSolver(maze)

# Тест 1: BFS
print(f"\n{'='*50}")
print("ТЕСТ 1: BFS")
solver.set_strategy(BFSStrategy())
stats = solver.solve("demo_maze")
print(f"Время: {stats.time_ms:.4f} мс")
print(f"Посещено: {stats.visited_cells}")
print(f"Длина пути: {stats.path_length}")

# Тест 2: DFS
print(f"\n{'='*50}")
print("ТЕСТ 2: DFS")
solver.set_strategy(DFSStrategy())
stats = solver.solve("demo_maze")
print(f"Время: {stats.time_ms:.4f} мс")
print(f"Посещено: {stats.visited_cells}")
print(f"Длина пути: {stats.path_length}")

# Тест 3: A*
print(f"\n{'='*50}")
print("ТЕСТ 3: A*")
solver.set_strategy(AStarStrategy())
stats = solver.solve("demo_maze")
print(f"Время: {stats.time_ms:.4f} мс")
print(f"Посещено: {stats.visited_cells}")
print(f"Длина пути: {stats.path_length}")

# Тест 4: Дейкстра
print(f"\n{'='*50}")
print("ТЕСТ 4: Дейкстра")
solver.set_strategy(DijkstraStrategy())
stats = solver.solve("demo_maze")
print(f"Время: {stats.time_ms:.4f} мс")
print(f"Посещено: {stats.visited_cells}")
print(f"Длина пути: {stats.path_length}")

# Тест 5: Динамическая смена алгоритма
print(f"\n{'='*50}")
print("ТЕСТ 5: Смена алгоритма на лету")
print("Было:", solver.strategy.get_name())
solver.set_strategy(BFSStrategy())
print("Стало:", solver.strategy.get_name())