-- Importación de módulos necesarios
require "import"
import "android.content.Context"
import "android.content.Intent"
import "android.content.IntentFilter"
import "android.net.ConnectivityManager"
import "java.util.Calendar"
local http = require("http")  -- Asegúrate de que esta biblioteca esté disponible en tu entorno
local json = require("json")  -- Asumiendo que tienes una biblioteca para manejar JSON

-- Función para obtener el clima actual
local function getWeather(city, apiKey)
    local url = string.format("http://api.openweathermap.org/data/2.5/weather?q=%s&appid=%s&lang=es&units=metric", city, apiKey)
    local response = http.get(url)
    
    if response and response.status_code == 200 then
        local weatherData = json.decode(response.body)
        local temperature = weatherData.main.temp
        local description = weatherData.weather[1].description
        return string.format("El clima en %s es %s con una temperatura de %.1f grados Celsius.", city, description, temperature)
    else
        return "No se pudo obtener el estado del clima."
    end
end

-- Obtener la hora actual
local calendar = Calendar.getInstance()
local hour = calendar:get(Calendar.HOUR_OF_DAY)
local minute = calendar:get(Calendar.MINUTE)
local timeMessage = string.format("Son las %02d:%02d.", hour, minute)

-- Obtener el nivel de batería
local batteryIntent = this:registerReceiver(nil, IntentFilter(Intent.ACTION_BATTERY_CHANGED))
local level = batteryIntent:getIntExtra("level", -1)
local scale = batteryIntent:getIntExtra("scale", -1)
local batteryPercent = (level / scale) * 100
local batteryMessage = "El nivel de batería es " .. string.format("%.0f", batteryPercent) .. "%."

-- Obtener el estado de la red
local connectivityManager = this:getSystemService(Context.CONNECTIVITY_SERVICE)
local activeNetworkInfo = connectivityManager:getActiveNetworkInfo()
local networkStatus

if activeNetworkInfo and activeNetworkInfo:isConnected() then
    networkStatus = "Hay conexión a internet."
else
    networkStatus = "No hay conexión a internet."
end

-- Obtener el clima actual (modifica "tu_ciudad" y "tu_api_key")
local city = "Vicente Noble"
local apiKey = "ac3058fd0dd4fa20aaf206bee7d6a9cf"
local weatherMessage = getWeather(city, apiKey)

-- Crear y verbalizar los mensajes en el orden deseado
local message = timeMessage .. " " .. batteryMessage .. " " .. networkStatus .. " " .. weatherMessage
this:speak(message)

return true