#pragma once

#include <chrono>

#include "aqsi-commons-global.h"

namespace aqsi {

class AQSICOMMONS_EXPORT WatchdogNotifier
{
public:
    WatchdogNotifier() noexcept;
    /// \brief Оповещение systemd watchdog о том, что приложение загрузилось или завершило перезагрузку конфигурационных
    /// параметров (после получения сигнала SIGHUP)
    /// \details Приложение должно вызывать этот метод после загрузки/перечитывания конфига
    void notifyReady() noexcept;
    /// \brief Оповещение systemd watchdog о том, что приложение не зависло
    /// \details Приложение должно вызывать этот метод по таймауту меньшему или равному тому, который указан в Unit
    /// файле сервиса
    void notify() noexcept;
    /// \brief Максимальный таймаут ожидания "keep alive ping" от приложения
    /// \return Возвращает максимальный таймаут. Если systemd watchdog настроен, то таймаут в мс, иначе 0
    std::chrono::milliseconds watchdogTimeout() noexcept;
};

}  // namespace aqsi
