//  BlockyFroggy
//  Copyright © 2017 John Ryland.
//  All rights reserved.
#pragma once
#ifndef HTTP_CLIENT_H
#define HTTP_CLIENT_H

 
#include <string>
#include <vector>
#include <map>
#include <cstdint>


/*
enum HTTPResult {
    HTTP_OK = 0,        ///<Success
    HTTP_PROCESSING,    ///<Processing
    HTTP_PARSE,         ///<url Parse error
    HTTP_DNS,           ///<Could not resolve name
    HTTP_PRTCL,         ///<Protocol error
    HTTP_NOTFOUND,      ///<HTTP 404 Error
    HTTP_REFUSED,       ///<HTTP 403 Error
    HTTP_ERROR,         ///<HTTP xxx error
    HTTP_TIMEOUT,       ///<Connection timeout
    HTTP_CONN,          ///<Connection error
    HTTP_CLOSED,        ///<Connection was closed by remote host
};
*/


//! Raw function call which returns in response the entire slurpped data from server
int makeSyncHttpRequest(std::vector<uint8_t>& response, const char* a_method, const char* a_url, const std::map<std::string,std::string>& args);
 

//! Data associated with a HTTP response
struct HttpResponse
{
  int                               result;
  std::string                       status;
  std::map<std::string,std::string> headers;
  std::vector<uint8_t>              body;
};


//! Data associated with a HTTP request
struct HttpRequest
{
  std::string                       method;
  std::string                       url;
  std::map<std::string,std::string> args;
};


// Parsed result data and wrapped request and response objects
//HttpResponse makeHttpRequestWrapper(const HttpRequest& request);
void makeHttpRequestWrapper(const HttpRequest& request, HttpResponse& result, std::vector<uint8_t>& body);
void makeAsyncHttpRequestWrapper(const HttpRequest& request);


#endif // HTTP_CLIENT_H

