#pragma once

#include "../services/dbControllService.h"
#include <drogon/HttpController.h>
#include <drogon/utils/coroutine.h>

using namespace drogon;

class AppController : public drogon::HttpController<AppController> {
public:
    METHOD_LIST_BEGIN
    ADD_METHOD_TO(AppController::apiTrack, "/api/track", Post, "ApiFilter");
    ADD_METHOD_TO(AppController::apiLogin, "/api/auth/login", Post, "ApiFilter");
    ADD_METHOD_TO(AppController::apiStatus, "/api/auth/status", Get, "ApiFilter");
    ADD_METHOD_TO(AppController::apiLogout, "/api/auth/logout", Post, Get, "ApiFilter");
    ADD_METHOD_TO(AppController::apiTrackers, "/api/trackers", Get, "ApiFilter");
    ADD_METHOD_TO(AppController::apiSigFoxData, "/api/sigfox/data", Post,Get, "ApiFilter");
    METHOD_LIST_END

    drogon::Task<HttpResponsePtr> apiTrack(HttpRequestPtr req);
    drogon::Task<HttpResponsePtr> apiLogin(HttpRequestPtr req);
    drogon::Task<HttpResponsePtr> apiStatus(HttpRequestPtr req);
    drogon::Task<HttpResponsePtr> apiLogout(HttpRequestPtr req);
    drogon::Task<HttpResponsePtr> apiTrackers(HttpRequestPtr req);
    drogon::Task<HttpResponsePtr> apiSigFoxData(HttpRequestPtr req);

private:
    CdbControllService dbService_;
};