#include <Arduino.h>
#include "config.h"
#include "state.h"
#include "wifi_ap.h"
#include "webserver.h"
#include "ota.h"
#include "buttons.h"
#include "modbus_epever.h"
#include "rules.h"
#include "sleep.h"
#include "historique.h"
#include "debug_log.h"

// Instance globale partagée entre tous les modules
SystemState state;

void setup() {
    Serial.begin(115200);
    Serial.println("\n==============================");
    Serial.println("  KC868-A2 Contrôleur solaire");
    Serial.printf ("  Reset reason : %d\n", (int)esp_reset_reason());
    Serial.println("==============================");
    debugLogf("Boot KC868-A2 — reset reason %d", (int)esp_reset_reason());

    // Réveil timer : vérification rapide — peut retourner en deep sleep ici
    verifierEtDormirSiNuit();

    // Init GPIO relais
    pinMode(PIN_RELAY1, OUTPUT);
    pinMode(PIN_RELAY2, OUTPUT);
    restaurerRelaisNVS();   // restaure depuis NVS (survit au power-off)

    demarrerWifi();
    demarrerWebserveur();   // monte LittleFS
    demarrerOTA();
    initBoutons();
    initModbus();
    chargerConfigSleep();   // après montage LittleFS
    restaurerRelais();      // restaure l'état relais si réveil depuis deep sleep
    initRegles();
    initHistorique();

    debugLogf("Système prêt.");
}

void loop() {
    traiterDNS();
    gererOTA();
    gererBoutons();
    gererModbus();
    gererRegles();
    gererHistorique();
    gererSleep();
}
