#ifndef __LAND_MARK_HPP__
#define __LAND_MARK_HPP__
#include <string>
#include <vector>
#include <mutex>
#include <map>
#include <memory>
#include <tuple>
#include "write-copy.h"
#include "point.h"
enum DIRECTION_TYPE{
	NODIRECTORY = 0,
	EAST        = 1,
	SOURTH      = 2,
	WEST		= 3,
	NORTH		= 4
};
struct LandmarkInfo:point
{
	LandmarkInfo()
		:landmark_id(0)
		 ,landmark_name("")
		 ,map_id(0)
		 ,area_id(0)
	{}
	LandmarkInfo(point &p,int id,std::string & n,int mapid, int areaid)
		:point(p)
		 ,landmark_id(id)
		 ,landmark_name(n)
		 ,map_id(mapid)
		 ,area_id(areaid)
	{}
	int landmark_id;
	std::string landmark_name;
	int map_id;
	int area_id;
};
struct map_direction
{
	map_direction(int mapid,int angle)
		:map_id(mapid)
		 ,north_angle(angle)
	{}
	int map_id;
	int north_angle;
};
struct Landmark_list:single_base<Landmark_list, int, std::shared_ptr<LandmarkInfo>>
{
	//std::vector<std::shared_ptr<LandmarkInfo>> m_v;
	std::map<int,std::shared_ptr<map_direction>> m_map_direction;
	//static Landmark_list * instance();
	void init_from_db();
	void init_landmarkInfo(int id = -1);
	
	void init_mapDirection();
	//landmarkId landmark_direction  landmark_dis
	std::tuple<int,int,double> get_landmark(int mapid,int areaid,const point &pt);
	DIRECTION_TYPE GetDirectionType(point card_point, point landmark_point, int map_id);
	std::mutex m_mutex;
};
#endif