#ifndef API_H
#define API_H

#include <Arduino_JSON.h>
#include <WiFiEsp.h>

class API {
public:


    /**
     * @brief Construit un nouvelle objet API
     * 
     * @param[in] user nom de l'utilisateur de l'API
     * @param[in] password mot de passe de l'utilisateur
     * @param[in] host address de l'api
     * @param[in] https l'address de l'api est en https *(defaut `true`)*
     */
    API(String user, String password, String host, bool https = true);

    /**
     * @brief Initialise la connection Wifi de l'esp
     * 
     * @param wifiId nom du wifi
     * @param wifiPass mot de passe du wifi
     * @param espSerial port serie de l'esp (hard ou soft)
     * @return true la connexion a bien fonctionner
     * @return false erreur a la connexion
     */
    bool wifiBegin(String wifiId, String wifiPass, Stream* espSerial);

    /**
     * @brief envoie la valeur d'un capteur de poubelle à l'api
     * 
     * @param val valeur du capteur
     * @param poubelleID ID de la poubelle
     * @param unit uniter de mesure du capteur *(ex: g, cm, degree,...)
     * @param full poubelle est considéré comme pleine
     * @return true la valeur s'est bien envoyer
     * @return false il y a une erreur durran l'envoie
     */
    bool sendValute(String val, String poubelleID, String unit, bool full);


private:
    /**
     * @brief connect l'utilisateur a l'api et met a jour le token
     * 
     * @return true l'utilisateur est bien connecter
     * @return false erreur lors de la connexion de l'utilisateur
     */
    bool connect();

    /**
     * @brief ID de l'utilisateur
     * 
     */
    String user;
    /**
     * @brief mdp de l'utilisateur
     * 
     */
    String password;

    /**
     * @brief adresse du serveur API
     * 
     */
    String serveurHost;

    /**
     * @brief true = serveur en https (443)
     * 
     */
    bool https;

    /**
     * @brief client http
     * 
     */
    WiFiEspClient* client;
    
    /**
     * @brief token de connexion du client (vide = deconnecter)
     * 
     */
    String token;



};


#endif