#pragma once

#include <AP_Generator/AP_Generator.h>

#if HAL_GENERATOR_ENABLED

#include "AP_BattMonitor.h"
#include "AP_BattMonitor_Backend.h"

// Sub class for generator electrical
class AP_BattMonitor_Generator_Elec : public AP_BattMonitor_Backend
{
public:

    // Inherit constructor
    using AP_BattMonitor_Backend::AP_BattMonitor_Backend;

    void init(void) override {};

    // Read the battery voltage and current
    void read(void) override;

    bool has_current(void) const override;

    bool has_consumed_energy(void) const override;

    // Override backend update_failsafes.  No point in failsafing twice so generator failsafes are only updated from the electrical instance of the generator drivers
    AP_BattMonitor::Failsafe update_failsafes() override;
};

// Sub class for generator fuel
class AP_BattMonitor_Generator_FuelLevel : public AP_BattMonitor_Backend
{
public:

    // Inherit constructor
    using AP_BattMonitor_Backend::AP_BattMonitor_Backend;

    void init(void) override;

    // Read the fuel level
    void read(void) override;

    // This is where we tell the battery monitor 'we have current' if we want to report a fuel level remaining
    bool has_current(void) const override;

    // This is where we tell the battery monitor 'we have consummed energy' if we want to report a fuel level remaining
    bool has_consumed_energy(void) const override;
};
#endif
