#include "dod_evidence_panel_helpers.h"

namespace fn_viz {
namespace dod_panel {

StatusCounts count_status(const DodPanelState& state) {
    StatusCounts c;
    c.total = static_cast<int>(state.items.size());
    for (const auto& it : state.items) {
        if      (it.status == "pending")   ++c.pending;
        else if (it.status == "done")      ++c.done;
        else if (it.status == "validated") ++c.validated;
        else if (it.status == "failed")    ++c.failed;
        else                               ++c.pending;  // unknown treated as pending

        if (it.required) {
            const DodEvidence* ev = find_evidence(state, it.id);
            const bool resolved = (it.status == "done" || it.status == "validated");
            if (ev == nullptr && !resolved) ++c.missing_required;
        }
    }
    return c;
}

const DodEvidence* find_evidence(const DodPanelState& state, const std::string& item_id) {
    for (const auto& ev : state.evidences) {
        if (ev.item_id == item_id) return &ev;
    }
    return nullptr;
}

std::string status_icon_id(const std::string& status) {
    if (status == "done")      return "circle-dot";
    if (status == "validated") return "circle-check";
    if (status == "failed")    return "circle-x";
    return "circle-dashed";  // pending / unknown
}

int status_color_token(const std::string& status) {
    if (status == "done")      return 1;
    if (status == "validated") return 2;
    if (status == "failed")    return 3;
    return 0;
}

}  // namespace dod_panel
}  // namespace fn_viz
