/* 
 * File:   VideoRegions.h
 * Author: carlos
 *
 * Created on 6 de noviembre de 2012, 15:47
 */

#ifndef VIDEOREGIONS_H
#define	VIDEOREGIONS_H

#include "Stereo.h"
#include "ImgRegion.h"
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/core/core.hpp>
#include <fstream>
#include "pt_t.h"
#include <boost/archive/binary_iarchive.hpp>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/serialization/vector.hpp>
#include <boost/serialization/string.hpp>
using namespace std;

class CRF {
    friend class boost::serialization::access;
    template<class Archive>
    void serialize(Archive &ar, const unsigned int version){
        ar & m_frameNum;
        ar & m_videoRegions;
    }
    
public:
    
    
    typedef vector<ImgRegion> FrameRegions_t;
    
    CRF();
    CRF(const CRF& orig);
    virtual ~CRF();
    

    int openFile(string dataFile, int maxSize);

    int addPoint(int nFrame, int nLabel, int x, int y);
    int clearPts(int nFrame, int nLabel);
    Pt_t getPoint(int nFrame, int nLabel, int nPt);
    int setPoint(int nFrame, int nLabel, int nPt, Pt_t value);
    int getNumPts(int nFrame, int nLabel);
    int getNumLabels(int nFrame);
    int addLabel(int nFrame, string labelName);
    int removeLabel(int nFrame, int nLabel);
    int printLabelAndPts(int nFrame);    
    int copy(int idxOrigin, int idxDestiny);
    int nearestPointIndex(int nFrame, int x, int y, int *nRegion, int *nPt);
    int saveMarkedData();
    
    
    FrameRegions_t getRegions(int nFrame){
        return m_videoRegions.at(nFrame);
    }

    void setFrameNum(int frameNum) {
        this->m_frameNum = frameNum;
    }

    int getFrameNum() const {
        return m_frameNum;
    }

    int getFileLength() const {
        return m_fileLength;
    }
    
private:

    string m_dataPath;
    int m_fileLength;    
    
    int m_frameNum; 
    vector<FrameRegions_t> m_videoRegions;
    
    int loadMarkedData();

};

#endif	/* VIDEOREGIONS_H */

