import sys 
import os

sys.path.insert(0, r'C:\ivantsovma\docs\MazeProject')
from builders import TextFileMazeBuilder
from strategies import BFSStrategy
from visualization import ConsoleView, GameController

def test_observer():
    print("ПАТТЕРН OBSERVER") 
    # Загружаем лабиринт
    builder = TextFileMazeBuilder()
    maze = builder.build_from_file("mazes/small_maze.txt")
    
    #создаём наблюдателя
    view = ConsoleView()
    
    #уведомления о событии
    view.update("maze_loaded", maze)
    view.update("search_start", None)
    view.update("path_found", None)
    
    print("\nObserver работает!")

def test_game_controller():
    print("ПАТТЕРН COMMAND (УПРАВЛЕНИЕ ИГРОКОМ)")
    
    #pагружаем простой лабиринт
    builder = TextFileMazeBuilder()
    maze = builder.build_from_file("mazes/simple_maze.txt")
    
    #cоздаём контроллер
    controller = GameController(maze)
    
    print(f"Начальная позиция: ({controller.get_player_position().x}, {controller.get_player_position().y})")
    
    #движение вправо
    controller.move((1, 0))  #Вправо
    print(f"После движения вправо: ({controller.get_player_position().x}, {controller.get_player_position().y})")
    
    controller.move((1, 0))  #Вправо
    print(f"После движения вправо: ({controller.get_player_position().x}, {controller.get_player_position().y})")
    
    #отменяем последние движения
    controller.undo()
    print(f"После отмены: ({controller.get_player_position().x}, {controller.get_player_position().y})")
    
    controller.undo()
    print(f"После второй отмены: ({controller.get_player_position().x}, {controller.get_player_position().y})")
    
    print("\nCommand работает!")

def test_integration():
    print("ИНТЕГРАЦИЯ ВСЕХ КОМПОНЕНТОВ")
    
    # Загружаем лабиринт
    builder = TextFileMazeBuilder()
    maze = builder.build_from_file("mazes/small_maze.txt")
    
    # Находим путь
    bfs = BFSStrategy()
    path = bfs.find_path(maze, maze.start, maze.exit)
    
    # Создаём отображение
    view = ConsoleView()
    view.maze = maze
    view.path = path
    view.render()
    
    print("\nИнтеграция работает!")

def run_interactive_game():
    print("ИНТЕРАКТИВНАЯ ИГРА")
    print("Для запуска интерактивной игры используйте:")
    print("python play_maze.py")

if __name__ == "__main__":
    test_observer()
    test_game_controller()
    test_integration()
    run_interactive_game()