/*
 * system.h
 *
 * Public system services:
 *   • Battery charge-state machine
 *   • Inactivity / deep-sleep handling
 *   • RTC time & alarm
 *
 * All implementation lives in system.c
 */

#ifndef MAIN_RTC_H_
#define MAIN_RTC_H_

#include "driver/gpio.h"
#include "esp_sleep.h"
#include "esp_timer.h"
#include "esp_err.h"
#include <time.h>


#define POWER_INACTIVITY_TIMEOUT_MS 180000

/* -------------------------------------------------------------------------- */
/*  Public API                                                                */
/* -------------------------------------------------------------------------- */

esp_err_t rtc_xtal_init();

bool rtc_is_set();


void rtc_check_shutdown_timer();
void rtc_reset_shutdown_timer(); // reset shutoff timer
void soft_idle_enter(void);
void soft_idle_exit(void);
bool soft_idle_is_active(void);
bool soft_idle_button_raw(void);   /* direct GPIO read, no I2C */
esp_sleep_wakeup_cause_t rtc_wakeup_cause();

/*void adjust_rtc_hour(char *key, int8_t dir);
void adjust_rtc_min(char *key, int8_t dir);*/

int64_t rtc_get_s (void);
int64_t rtc_get_ms(void);
void rtc_set_s(int64_t);

void rtc_save_time(void);    // No-op: time is always live via rtc_get_s()
void rtc_restore_time(void); // Re-syncs stdlib clock on boot; emits TIME log marker

void    rtc_schedule_next_alarm(void);
int64_t rtc_get_next_alarm_s();

bool rtc_alarm_tripped();

void rtc_print_debug(void); // Dump full RTC state to stdout (UART)

/* -------------------------------------------------------------------------- */
#endif /* MAIN_RTC_H_ */