#include "logger.h"

Logger::Logger(std::string logFilePathm)
    : filePath(logFilePathm)
{
    if(openFile(filePath))
        exit(234);
}

Logger::~Logger()
{
    file.close();
}

std::string Logger::getFilePath()
{
    return filePath;
}

int Logger::logCommandLine(std::string logText)
{
    std::time_t now = std::time(nullptr);
    struct tm *tm_now = localtime(&now);
    std::string date((tm_now->tm_mday < 10 ? "0" : "") + std::to_string(tm_now->tm_mday) + "." +
                     (tm_now->tm_mon +1 < 10 ? "0" : "" ) + std::to_string(tm_now->tm_mon +1) + "." +
                     std::to_string(1900 + tm_now->tm_year) + " - " +
                     (tm_now->tm_hour < 10 ? "0" : "" ) + std::to_string(tm_now->tm_hour) + ":" +
                     (tm_now->tm_min  < 10 ? "0" : "" ) + std::to_string(tm_now->tm_min));
    return writetoFile( " -> " + date + ": \"" + logText + "\"");
}

int Logger::logSubLine(std::string line)
{
    return writetoFile("\t\t" + line);
}

std::string Logger::getLogText()
{
    return std::string((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());
}

int Logger::clearFile()
{
    //close it
    file.close();

    //open it empty + close it
    std::ofstream ofs;
    ofs.open(filePath, std::ofstream::out | std::ofstream::trunc);
    if(!ofs.is_open()) {
        perror("Open File for clearing failed");
        return 35;
    }
    ofs.close();

    //reopen it
    return openFile(filePath);
}

int Logger::writetoFile(std::string t)
{
    file << t << std::endl;
    return file.good();
}

int Logger::openFile(std::string path)
{
    file.open(path, std::ios::in | std::ios::out | std::ios::app);
    if(!file.is_open()) {
        //Exestiert nicht => Erstelle Datei
        std::ofstream ofs(path);
        if(!ofs.is_open()) {
            perror((" => Error: Konnte LogDatei nicht erstellen: '" + path + "'").c_str());
            return (5656);
        } else {
            ofs.close();
        }
        file.open(path);
        if(!file.is_open()) {
            perror((" => Error: Konnte LogDatei nicht aufmachen: '" + path + "'").c_str());
            return (5657);
        }
    }
    return 0;
}
