namespace LiquidCode.Tester.Worker.Services;

public interface IOutputCheckerService
{
    /// <summary>
    /// Compares actual output with expected output
    /// </summary>
    /// <param name="actualOutput">Output from user's solution</param>
    /// <param name="expectedOutputPath">Path to expected output file</param>
    /// <returns>True if outputs match</returns>
    Task<bool> CheckOutputAsync(string actualOutput, string expectedOutputPath);

    /// <summary>
    /// Checks output using custom checker if available, falls back to standard checking
    /// </summary>
    /// <param name="actualOutput">Output from user's solution</param>
    /// <param name="inputFilePath">Path to input file</param>
    /// <param name="expectedOutputPath">Path to expected output file</param>
    /// <param name="checkerPath">Path to custom checker executable (optional)</param>
    /// <returns>True if output is accepted</returns>
    Task<bool> CheckOutputWithCheckerAsync(string actualOutput, string inputFilePath, string expectedOutputPath, string? checkerPath);
}
