
#ifndef shpTypes_h
#define shpTypes_h

#include <iostream>
#include <vector>

#include "CoordSys.h"

namespace jf {
typedef int64_t JfDataId;

struct OBJ_TrafficSign {
    JfDataId lOBJID;
    int nShape;
    int nSign_type;
    int nType1;
    int nType2;
    std::string strSign_text;
    std::string strImageID;
    std::vector<std::vector<double>> vctvdGeoArea;
};

struct OBJ_Pole {
    JfDataId lOBJID;
    int nShape;
    int nPole_type2;
    std::vector<std::vector<double>> vctvdGeoArea;
};

//struct OBJ_Arrow {
//    JfDataId lOBJID;
//    JfDataId lLaneID;
//    int nColor;
//    std::string strArrow_type;
//    std::vector<std::vector<double>> vctvdGeoArea;
//};

struct OBJ_Text {
    JfDataId lOBJID;
    JfDataId lLaneID;
    int nColor;
    std::string strText;
    std::vector<std::vector<double>> vctvdGeoArea;
};

struct OBJ_Symbol {
    JfDataId lOBJID;
    JfDataId lLaneID;
    int nColor;
    std::vector<std::vector<double>> vctvdGeoArea;
};

//struct OBJ_StopLine {
//    JfDataId lOBJID;
//    int nSL_type;
//    int nColor;
//    std::vector<std::vector<double>> vctvdGeoLink;
//};

//struct OBJ_Crossing {
//    JfDataId lOBJID;
//    JfDataId lLaneID;
//    std::vector<std::vector<double>> vctvdGeoArea;
//};

//struct OBJ_TrafficLight {
//    JfDataId lOBJID;
//    std::vector<JfDataId> vctlLaneIDs;
//    double dHeading;
//    int nLight_type;
//    std::string strLight_dir;
//    int nLightArray;
//    int nLightCount;
//    std::vector<std::vector<double>> vctvdGeoArea;
//};

struct OBJ_OverHead {
    JfDataId lOBJID;
    std::vector<JfDataId> vctlLaneIDS;
    int nOH_type;
    std::vector<std::vector<double>> vctvdGeoLink;
};

struct OBJ_FillArea {
    JfDataId lOBJID;
    std::vector<JfDataId> vctlLaneIDS;
    std::vector<std::vector<double>> vctvdGeoArea;
};

struct OBJ_WarningArea {
    JfDataId lOBJID;
    int nColor;
    std::vector<std::vector<double>> vctvdGeoArea;
};

struct OBJ_RoadArea {
    JfDataId lOBJID;
    std::vector<std::vector<double>> vctvdGeoArea;
};

struct OBJ_MedianArea {
    JfDataId lOBJID;
    int nMA_type;
    std::vector<std::vector<double>> vctvdGeoArea;
};

//struct OBJ_Point {
//    JfDataId lOBJID;
//    std::vector<JfDataId> vctlLaneIDS;
//    int nOBJ_type;
//    std::string strMemo1;
//    std::string strMemo2;
//    std::string strMemo3;
//    std::string strMemo4;
//    std::vector<double> vctvdGeoPoint;
//};

//struct LaneADAS {
//    int nSeq_num;
//    double dLatitude;
//    double dLongitude;
//    double dOutCurvature;
//    double dOutRoll;
//    double dOutPitch;
//    double dOutAzimuth;
//    double dOffset;
//};

//struct HD_EdgeNode {
//    JfDataId lRE_NodeID;
//    std::vector<double> vctdGeoNode;
//};

//struct HD_LaneMark {
//    JfDataId lMarkID;
//    int nMark_no;
//    int nMark_type;
//    int nMark_color;
//    int nMark_width;
//    std::vector<std::vector<double>> vctvdGeoArea;
//};

//struct HD_EdgeLink {
//    JfDataId lEdgeID;
//    HD_EdgeNode enSE_Node;
//    HD_EdgeNode enEE_Node;
//    int nEdge_no;
//    int nEdge_type;
//    int nEdge_cross;
//    int nMark_count;
//    std::vector<std::vector<double>> vctvdGeoLink;
//    std::vector<HD_LaneMark> vctlmLaneMarks;
//};

//struct HD_LaneNode {
//    JfDataId lLaneNodeID;
//    std::vector<double> vctdGeoNode;
//};

//struct HD_LaneLink {
//    JfDataId lLaneID;
//    HD_LaneNode lnSL_Node;
//    HD_LaneNode lnEL_Node;
//    JfDataId lL_EdgeID;
//    JfDataId lR_EdgeID;
//    int nLane_no;
//    int nDirection;
//    int nLane_type;
//    std::string strArrow;
//    int nLane_width;
//    std::vector<std::vector<double>> vctvdGeoLink;
//    std::vector<LaneADAS> vctlaLaneADASes;
//};

//struct Junction {
//    JfDataId lJCID;
//    std::vector<double> vctdGeoNode;
//};

//struct Road_EdgeNode {
//    JfDataId lRE_NodeID;
//    std::vector<double> vctdGeoNode;
//};

//struct Road_EdgeLink {
//    JfDataId lREdgeID;
//    Road_EdgeNode enSRE_Node;
//    Road_EdgeNode enERE_Node;
//    int nREdge_type;
//    int nREdgeColor;
//    std::vector<std::vector<double>> vctvdGeoLink;
//};

//struct Road_CrossArea {
//    JfDataId lCross_ID;
//    std::vector<std::vector<double>> vctvdGeoArea;
//};

//struct Road {
//    Junction jctSJC;
//    Junction jctEJC;
//    std::vector<Road_EdgeLink> vctelL_REdge;
//    std::vector<Road_EdgeLink> vctelR_REdge;
//    double dLength;
//    int nLane_num;
//    int nDirection;
//    int nRoad_rank;
//    int nRoad_type;
//    double dStartangle;
//    std::string strName_chn;
//    int nSpeed;
//    std::vector<std::vector<double>> vctvdGeoLink;
//    std::vector<Road_CrossArea> vctcaCrossAreas;
//    std::vector<HD_LaneLink> vctllLaneLinks;
//    std::vector<HD_EdgeLink> vctelEdgeLinks;
//    std::vector<OBJ_TrafficSign> vcttsTrafSigns;
//    std::vector<OBJ_Arrow> vctarArrows;
//    std::vector<OBJ_Text> vcttxTexts;
//    std::vector<OBJ_Symbol> vctsbSymbols;
//    std::vector<OBJ_StopLine> vctslStopLines;
//    std::vector<OBJ_Crossing> vctcrCrossings;
//    std::vector<OBJ_OverHead> vctohOverHeads;
//    std::vector<OBJ_FillArea> vctfaFillAreas;
//};

};  // namespace jf

#endif