import csv
import time
from maze import MazeBuilder
from solver import BfsStrategy, DfsStrategy, AstarStrategy, MazeSolver

MAPS = ["simple.txt", "medium.txt", "hard.txt"]
REPEATS = 5

def run_one(filename, strategy):
    maze = MazeBuilder().from_file("raskatovia/docs/data/task2/maps/" + filename).build()
    solver = MazeSolver(strategy)
    start = time.perf_counter()
    result = solver.solve(maze)
    work_time = time.perf_counter() - start
    return result, work_time

def main():
    rows = [["map", "algorithm", "try", "time", "visited", "length"]]
    strategies = [BfsStrategy(), DfsStrategy(), AstarStrategy()]

    for filename in MAPS:
        for strategy in strategies:
            for number in range(1, REPEATS + 1):
                result, work_time = run_one(filename, strategy)
                rows.append([
                    filename,
                    result["name"],
                    number,
                    work_time,
                    result["visited"],
                    result["length"]
                ])

    with open("raskatovia/docs/data/task2/results.csv", "w", newline="", encoding="utf-8") as file:
        writer = csv.writer(file)
        writer.writerows(rows)

    print("results saved")

main()