//
// Created by Dan Crosby on 2025-01-15.
//

#ifndef EAGLE0_AIPERFORMANCERUNNER_HPP
#define EAGLE0_AIPERFORMANCERUNNER_HPP

#include <chrono>
#include <map>
#include <string>
#include <vector>

#include "src/main/cpp/net/eagle0/shardok/ai/IterativeDeepeningAI.hpp"

namespace shardok {

/**
 * Metrics captured for each AI command evaluation during performance testing.
 */
struct AIPerformanceMetrics {
    int commandNumber;
    int depthAchieved;
    int commandsEvaluated;
    int totalCommands;
    std::string selectedCommandType;
    EvaluationCompletionReason completionReason;
};

/**
 * Overall results from a performance test run.
 */
struct PerformanceTestResults {
    std::string mapName;
    int totalTurns;
    std::vector<AIPerformanceMetrics> commandMetrics;
    double averageDepth;
    double completionRate;
    std::chrono::milliseconds totalTime;
};

/**
 * Configuration options for performance testing.
 */
struct PerformanceTestConfig {
    std::string mapName = "Alah";
    int numTurns = 5;
    bool defenderToggle = false;
    bool verbose = false;
    int aiUnitCount = 6;
    int humanUnitCount = 6;
};

}  // namespace shardok

#endif  // EAGLE0_AIPERFORMANCERUNNER_HPP