#pragma once

// --- Namespace SystemShutdown: utilidad multiplataforma para apagar el sistema de forma segura ---
namespace SystemShutdown {

    // --- Enums ---
    enum class ShutdownResult {
        SUCCESS = 0,        // Éxito
        ERROR_PERMISSION,   // Error de permisos insuficientes
        ERROR_SYSTEM_CALL,  // Error en la llamada al sistema
        ERROR_FORK_FAILED,  // Error al crear proceso hijo (Unix)
        ERROR_UNSUPPORTED   // Sistema operativo no soportado
    };

    // --- Estructuras ---
    struct ShutdownConfig {
        int delay_seconds{5};                                      // Segundos de retraso antes del apagado
        bool force_close_apps{true};                               // Forzar cierre de aplicaciones
        const char* shutdown_message{"El sistema se apagará..."};  // Mensaje mostrado durante el apagado

        // Constructor con valores por defecto
        ShutdownConfig() = default;
    };

    // --- Funciones ---
    auto shutdownSystem() -> ShutdownResult;                                           // Apaga el sistema con configuración por defecto
    auto shutdownSystem(const ShutdownConfig& config) -> ShutdownResult;               // Apaga el sistema con configuración personalizada
    auto shutdownSystem(int delay_seconds, bool force_apps = true) -> ShutdownResult;  // Apaga el sistema con parámetros simples
    auto resultToString(ShutdownResult result) -> const char*;                         // Convierte un código de resultado a string descriptivo
    auto isShutdownSupported() -> bool;                                                // Verifica si el sistema actual soporta apagado programático
    auto getRequiredPermissions() -> const char*;                                      // Obtiene información sobre los permisos necesarios

}  // namespace SystemShutdown
