// =============================================================================
//  safety/watchdog.cpp -- TWDT setup + helpers
// =============================================================================

#include "watchdog.h"

#include <Arduino.h>
#include <esp_task_wdt.h>

#include "../system/ar_log.h"
#include "../system/task_config.h"

namespace arautopilot::safety {

namespace {
constexpr const char* TAG = "AR/SAFE";
}  // namespace

void watchdog_init() {
    // ESP-IDF 5.x: esp_task_wdt_init takes a config struct, but
    // esp32 Arduino core wraps it with a simpler signature.
    esp_err_t err = esp_task_wdt_init(AR_WATCHDOG_TIMEOUT_S, true);
    if (err != ESP_OK) {
        AR_LOGE(TAG, "esp_task_wdt_init failed: %d", (int)err);
        return;
    }
    AR_LOGI(TAG, "watchdog_init: TWDT timeout %ds, panic on expire",
            AR_WATCHDOG_TIMEOUT_S);
}

void watchdog_subscribe_current_task() {
    esp_err_t err = esp_task_wdt_add(nullptr);
    if (err != ESP_OK && err != ESP_ERR_INVALID_ARG) {
        AR_LOGW(TAG, "esp_task_wdt_add failed: %d", (int)err);
    }
}

void watchdog_feed() { esp_task_wdt_reset(); }

}  // namespace arautopilot::safety
