/*
 * main.cpp
 *  Example mPower custom application.
 *
 *  Cross compile, package, and install.
 */

#include <time.h>
#include <unistd.h>
#include <sys/types.h>
#include <unistd.h>

#include <cstdlib>
#include <iostream>
#include <fstream>

using namespace std;

class App {
    unsigned int mSleepTimeSec      = 10;
    string       mLastUpdateTimeStr = "Unknown";

    void update_time(void) {
        char       buf[128];
        time_t     now = time(0);
        struct tm  ts  = *localtime(&now);
        strftime(buf, sizeof(buf), "%X %x %Z", &ts);
        this->mLastUpdateTimeStr = buf;
    }

public:
    void run(void) {
        pid_t    pid = getpid();
        ifstream fin;
        ofstream fout;
        string   status_msg("Undefined");
        string   status_fname(getenv("APP_DIR"));
        status_fname += "/status.json";

        fin.open("/etc/CPPExampleAppMessage", ios::in);
        if(fin.is_open()) {
            string tmpstr((istreambuf_iterator<char>(fin)), istreambuf_iterator<char>());
            status_msg = tmpstr;
        }

        while(true) {
            update_time();
            fout.open(status_fname, ios::out | ios::trunc);
            if(fout.is_open()) {
                fout << "{"
                     << "\"pid\":\"" << pid << "\","
                     << "\"AppInfo\":\""
                     << "Last update: " << this->mLastUpdateTimeStr << ", "
                     << status_msg << ", "
                     << "sleeping "     << this->mSleepTimeSec << " seconds.\""
                     << "}"
                     << endl;
                fout.close();
            }
            sleep(10);
        }
    }
};


int main () {
  App app;
  app.run();
  return 0;
}