#include <HTTPClient.h>

String textBeginString = "@";
String textEndString = "@";
String lehrTextBeginString = "@@";
String sourceBeginString = "@";
String sourceEndString = "@";
String url = "https://www.losungen.de/fileadmin/media-losungen/kalender/kalender_daten.php";

String getHTML(String url, String post_params) {
  String result = "";
  if(WiFi.status() == WL_CONNECTED) {
    HTTPClient http;
    http.begin(url);  // initialize the http instance
    http.addHeader("Content-Type", "application/x-www-form-urlencoded");  // add the header; needed for the POST request
    Serial.printf("[HTTP] POST %s  | DATA: %s\n", url.c_str(), post_params.c_str());
    int httpCode = http.POST(post_params);  // get the page; httpCode will be negative on error

    if(httpCode > 0) {
      // HTTP header has been send and Server response header has been handled
      Serial.printf("[HTTP] POST %d: %s\n", httpCode, url.c_str());

      // file found at server
      if(httpCode == HTTP_CODE_OK) {
          result = http.getString();
      }
    } else {
        Serial.printf("[HTTP] POST: %s\n", http.errorToString(httpCode).c_str());
    }

    http.end();
  }
  return result;
}
String getHTML() {  // gets the date and year from time.h library
  struct tm timeinfo;
  char dayInYear[4];
  char year[5];

  if(!getLocalTime(&timeinfo)){
    Serial.println("Failed to obtain time");
    return "";
  }
  sprintf(dayInYear,"%d",timeinfo.tm_yday+1);
  strftime(year,5, "%Y", &timeinfo);

  String post_params = "jahr=" + String(year) + "&tagid=" + String(dayInYear);  // create post parameters of the form "jahr=YYYY&tagid=III" where III is the day in the year
  return getHTML(url, post_params);
}

String getLosungFromHTML(String html) {
  int losungBeginIndex = html.indexOf(textBeginString)+textBeginString.length();
  int losungEndIndex = html.indexOf(textEndString,losungBeginIndex);

  return html.substring(losungBeginIndex, losungEndIndex);
}

String getLosungSourceFromHTML(String html) {  // get the source of losung in given html
  String losung = getLosungFromHTML(html);
  int losungIndex = html.indexOf(losung);
  int losungSourceBeginIndex = html.indexOf(sourceBeginString, losungIndex)+sourceBeginString.length();
  int losungSourceEndIndex = html.indexOf(sourceEndString, losungIndex+losung.length()+sourceBeginString.length());

  return html.substring(losungSourceBeginIndex, losungSourceEndIndex);
}

String getLehrtextFromHTML(String html) {
  int lehrtextBeginIndex = html.indexOf(lehrTextBeginString)+lehrTextBeginString.length();
  int lehrtextEndIndex = html.indexOf(textEndString, lehrtextBeginIndex);  // calculating is needed for better performance and to get the next index, not the current/previous

  return html.substring(lehrtextBeginIndex, lehrtextEndIndex);
}

String getLehrtextSourceFromHTML(String html) {  // get the source of losung in given html
  String lehrtext = getLehrtextFromHTML(html);
  int lehrtextIndex = html.indexOf(lehrtext);
  int lehrtextSourceBeginIndex = html.indexOf(sourceBeginString, lehrtextIndex)+sourceBeginString.length();
  int lehrtextSourceEndIndex = html.indexOf(sourceEndString, lehrtextSourceBeginIndex);  // calculating is needed for better performance and to get the next index, not the current/previous

  return html.substring(lehrtextSourceBeginIndex, lehrtextSourceEndIndex);
}