#include <WiFi.h>
#include <PubSubClient.h>
#include <Wire.h>     
#include "RTClib.h"   


const char* ssid = "MyWifi123_2.4Gnormal";
const char* password = "holamundo123";


const char* mqtt_server = "broker.hivemq.com";
const char* topic_time  = "danna/sensor2"; 

WiFiClient espClient;
PubSubClient client(espClient);
RTC_DS3231 rtc; 

void setup_wifi() {
  delay(10);
  Serial.print("\nConectando a WiFi...");
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("\nWiFi conectado!");
}

void reconnect() {
  while (!client.connected()) {
    Serial.print("Intentando conexión MQTT...");

    if (client.connect("XIAO_C6_Clock_Only")) {
      Serial.println("Conectado!");
    } else {
      Serial.print("Error: ");
      Serial.print(client.state());
      delay(5000);
    }
  }
}

void setup() {
  Serial.begin(115200);
  setup_wifi();
  client.setServer(mqtt_server, 1883);

  // Inicializar I2C en los pines D4 (SDA) y D5 (SCL)
  Wire.begin(); 
  
  if (!rtc.begin()) {
    Serial.println("No se detecta el módulo RTC. Revisa los cables SDA/SCL.");
    while (1); 
  }

  // Solo si el reloj perdió la pila, se sincroniza con la hora de la compu
  if (rtc.lostPower()) {
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  }
}

void loop() {
  if (!client.connected()) {
    reconnect();
  }
  client.loop();

  // OBTENER HORA DEL SENSOR I2C
  DateTime now = rtc.now();
  char horaFormateada[12];
  

  sprintf(horaFormateada, "%02d:%02d:%02d", now.hour(), now.minute(), now.second());

  //ENVIAR A MQTT (Tema: danna/sensor2)
  client.publish(topic_time, horaFormateada);


  Serial.print("Hora enviada al Dashboard: ");
  Serial.println(horaFormateada);

  delay(1000); 
}