// This file is part of the Luau programming language and is licensed under MIT License; see LICENSE.txt for details

#include "Luau/Constraint.h"
#include "Luau/NotNull.h"
#include "Luau/Scope.h"
#include "Luau/ToString.h"

#include <optional>
#include <string>
#include <vector>

namespace Luau
{

struct ConstraintSolverLogger
{
    std::string compileOutput();
    void captureBoundarySnapshot(const Scope2* rootScope, std::vector<NotNull<const Constraint>>& unsolvedConstraints);
    void prepareStepSnapshot(const Scope2* rootScope, NotNull<const Constraint> current, std::vector<NotNull<const Constraint>>& unsolvedConstraints);
    void commitPreparedStepSnapshot();

private:
    std::vector<std::string> snapshots;
    std::optional<std::string> preparedSnapshot;
    ToStringOptions opts;
};

} // namespace Luau