#pragma once

#include <optional>
#include <vector>

#include <fesa/core/diagnostic.hpp>
#include <fesa/model/domain.hpp>
#include <fesa/results/result_database.hpp>

namespace fesa {

struct AnalysisRunResult final {
    bool succeeded;
    std::optional<ResultDatabase> results;
    std::vector<Diagnostic> diagnostics;
};

class LinearStaticAnalysis final {
public:
    [[nodiscard]] AnalysisRunResult run(const Domain& domain) const;
};

}  // namespace fesa
