/** geocode.hpp
 * 住所・緯度・経度に関わるクラス：C++ヘッダ
 *
 * @copyright	(c)studio pahoo
 * @author		パパぱふぅ
 * @動作環境	MinGW C++
 */
#ifndef PAHOOGEOCODE_H
#define PAHOOGEOCODE_H

#include <stdlib.h>
#include <tchar.h>
#include <string>
#include <windef.h>

// 地点情報
#define __SIZE_PPOINTS  50		// 格納上限
typedef struct _ppoints {
	double longitude;			// 経度
	double latitude;			// 緯度
	std::wstring title;			// タイトル
	std::wstring address;		// 住所
	std::wstring description;	// 説明（HTMLタグ可）
	std::string icon;			// アイコンURL
} ppoints_t;

// クラス定義
class pahooGeocode {

public:
// コンストラクタ
pahooGeocode(std::string appname);
~pahooGeocode();

std::string appname = "";		// アプリケーション名
std::wstring errmsg = L"";		// エラーメッセージ
std::string webapi = "";		// 直近で使用したWebAPIのURL

// Google Cloud Platform APIキーなど
std::string GoogleAPIkey = "";
std::string GoogleMap1 = "";
std::string GoogleMap2 = "";
std::string GoogleMap3 = "";
std::string GoogleMap4 = "";

// Yahoo!アプリケーションID
std::string YahooAPIkey = "";

// 地点情報
ppoints_t Ppoints[__SIZE_PPOINTS];

bool isError(void);
std::wstring getError(void);
void resetError(void);
void setError(std::wstring msg);
std::string getwebapi(void);

bool isGoogleApiKey(void);
bool readGoogleApiKey(void);

void tokyo_wgs84(double lng0, double lat0, double* lng1, double* lat1);
void wgs84_tokyo(double lng0, double lat0, double* lng1, double* lat1);
void getPointDistance(double sour_lng, double sour_lat,
	double y, double x, double* dest_lng, double* dest_lat);

int searchPoints(std::wstring query, std::string ua, int api);
std::string makeMapLeaflet(
	std::string id, double logitude, double latitude, int zoom,
	std::string type="GSISTD", ppoints_t *items=NULL, size_t size=0,
	std::string call1="", std::string call2="",
	int max_width=200, int ofst_x=0, int ofst_y=0);

private:

// WebAPIアクセスキーを保存するファイル名【変更不可】
// const std::string FnameGoogleAPI = "GoogleAPIkey";
// const std::string FnameYahooAPI  = "YahooAPIkey";

int getPointsGoogle(std::wstring query, std::string ua);
int getPointsYOLP(std::wstring query, std::string ua);
int getPointsHRG(std::wstring query, std::string ua);
int getPointsHRG_postal(std::string postal, std::string ua);
int getPointsNominatim(std::wstring query, std::string ua);
int getPointsGSI(std::wstring query, std::string ua);
int __searchPoints(std::wstring query, std::string ua, int api);

};

#endif
