import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import sys
import os

def plot_results(csv_file: str, output_dir: str = "plots"):
    if not os.path.exists(csv_file):
        print(f"Файл {csv_file} не найден.")
        return
    df = pd.read_csv(csv_file, encoding='utf-8')
    required = ["лабиринт", "стратегия", "время_мс", "посещено_клеток", "длина_пути"]
    for col in required:
        if col not in df.columns:
            print(f"В CSV отсутствует колонка {col}")
            return

    os.makedirs(output_dir, exist_ok=True)

    sns.set_style("whitegrid")

    for maze_name in df["лабиринт"].unique():
        maze_df = df[df["лабиринт"] == maze_name]
        fig, axes = plt.subplots(1, 3, figsize=(15, 5))
        fig.suptitle(f"Сравнение стратегий для лабиринта {maze_name}", fontsize=14)

        ax = axes[0]
        sns.barplot(data=maze_df, x="стратегия", y="время_мс", ax=ax, palette="viridis")
        ax.set_title("Время выполнения (мс)")
        ax.set_ylabel("мс")

        ax = axes[1]
        sns.barplot(data=maze_df, x="стратегия", y="посещено_клеток", ax=ax, palette="plasma")
        ax.set_title("Количество посещённых клеток")
        ax.set_ylabel("клетки")

        ax = axes[2]
        sns.barplot(data=maze_df, x="стратегия", y="длина_пути", ax=ax, palette="coolwarm")
        ax.set_title("Длина найденного пути")
        ax.set_ylabel("шаги")

        plt.tight_layout()
        plt.savefig(os.path.join(output_dir, f"results_{maze_name}.png"), dpi=150)
        plt.close()

if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("Использование: python tables.py <csv_файл> <папка_для_сохранения>")
        print("Пример: python tables.py res.csv plots")
        sys.exit(1)
    csv_file = sys.argv[1]
    out_dir = sys.argv[2] if len(sys.argv) > 2 else "plots"
    plot_results(csv_file, out_dir)