#pragma once
#include <commons/common/commons.pc.h>
#include <tracking/FOI.h>

namespace gui {
class DrawStructure;
}

namespace track {

enum class DecisionStatus {
    CONFIRMED,
    WRONG,
    UNDECIDED
};

struct FOIStatus {
    FOI foi;
    DecisionStatus status;
    
    FOIStatus(const FOI& foi = FOI(), DecisionStatus status = DecisionStatus::UNDECIDED)
        : foi(foi), status(status)
    {}
    
    bool operator==(const FOI& other) const {
        return other == foi;
    }
    
    bool operator==(const FOIStatus& other) const {
        return other.foi == foi && other.status == status;
    }
};

class ConfirmedCrossings {
private:
	ConfirmedCrossings() {}

public:
	static void remove_frames(long_t frame, long_t id = -1);
	static bool is_foi_confirmed(const FOI& foi);
	static bool is_foi_wrong(const FOI& foi);
	static bool confirmation_available();
	static void add_foi(const FOI& foi);
    
    static void draw(gui::DrawStructure&, long_t frame);

	static void start();
	static void stop();
	static bool next(FOIStatus&);
	static bool previous(FOIStatus&);
	static bool started();
    
    static void set_wrong();
    static void set_confirmed();
};

}