#include "hotwaterControl.h"

// Bedeutungen:
//  smart (versorge bis aus - unabhängig von Solar),
//  versorge durchgäng, aber ggf. mit demand() =0 - unabhängig von Solar
//  auto (versorge wenn ausreichend Solar)

/*
 *
 */
HotwaterControl::HotwaterControl(SHactuator *swtch, QObject *parent) :
    HeatControl(nullptr, swtch, 0.0, 0.0, startTimeDayDefault, startTimeNightDefault, parent) {

    if (m_switch->url() == "")
        throw std::invalid_argument("HotwaterControl::HotwaterControl: no url (must be Tasmota)");

    m_consumer = new SHsensor(m_switch->nodeID(), SHsensor::powerSensor, m_switch->url());
}

/*
 *
 */
int HotwaterControl::currentDemand() const
{
    int ivalue;

    QString svalue= m_consumer->value();

    bool ok;
    ivalue = svalue.toUInt(&ok);

    if (not ok)
        ivalue = 0; // diskuabel!

    return ivalue;
}



/*
 *
 */
int HotwaterControl::relevantDemand() const
{
    if (suspended())
        return 0;
    else
        return demand();
}


/*
 *
 */
int HotwaterControl::demand() const
{
    if (state() == SHactuator::State::ON)
        return currentDemand();
    else
        return m_switch->powerDemand();
}


/*
 *
 */
bool HotwaterControl::maxReached() const
{   
    return (relevantDemand() <= 0); // ggf. <= 10 o.Ä.
}


/*
 *
 */
bool HotwaterControl::minReached() const
{
    return maxReached();
}


/*
 *
 */
int HotwaterControl::suspensionTime() const
{
    return 30; // min
}




/*
 *
 */
QString HotwaterControl::output() const
{
    return " " + name() + "(" + QString::number(relevantDemand()) + "):";
}