local currentVersion = GetResourceMetadata(GetCurrentResourceName(), 'version')
local resourceName = 'Muhaddil/muhaddil-machines'
local githubApiUrl = 'https://api.github.com/repos/' .. resourceName .. '/releases/latest'

-- Función para calcular la diferencia en días
local function daysAgo(dateStr)
    local year, month, day = dateStr:match("(%d+)-(%d+)-(%d+)")
    local releaseTime = os.time({ year = year, month = month, day = day })
    local currentTime = os.time()
    local difference = os.difftime(currentTime, releaseTime) / (60 * 60 * 24) -- Diferencia en días
    return math.floor(difference)
end

-- Función para convertir la fecha a "hace X días"
local function formatDate(releaseDate)
    local days = daysAgo(releaseDate)
    if days < 1 then
        return "Today"
    elseif days == 1 then
        return "Yesterday"
    else
        return days .. " days ago"
    end
end

-- Función para acortar la URL
local function shortenTexts(text)
    local maxLength = 35
    if #text > maxLength then
        local shortened = text:sub(1, maxLength - 3) .. '...'
        return shortened
    else
        return text
    end
end

local function printWithColor(message, colorCode)
    if type(message) ~= "string" then
        message = tostring(message)
    end
    print('\27[' .. colorCode .. 'm' .. message .. '\27[0m')
end

local function printCentered(text, length, colorCode)
    local padding = math.max(length - #text - 2, 0)
    local leftPadding = math.floor(padding / 2)
    local rightPadding = padding - leftPadding
    printWithColor('│' .. string.rep(' ', leftPadding) .. text .. string.rep(' ', rightPadding) .. '│', colorCode)
end

local function printWrapped(text, length, colorCode)
    if type(text) ~= "string" then
        text = tostring(text)
    end

    local maxLength = length - 2
    local pos = 1

    while pos <= #text do
        local endPos = pos + maxLength - 1
        if endPos > #text then
            endPos = #text
        else
            local spaceIndex = text:sub(pos, endPos):match('.*%s') or maxLength
            endPos = pos + spaceIndex - 1
        end

        local line = text:sub(pos, endPos)
        if endPos < #text then
            line = line .. '...'
        end

        printWithColor('│' .. line .. string.rep(' ', length - #line) .. '│', colorCode)

        pos = endPos + 1
    end
end

if Config.AutoVersionChecker then
    PerformHttpRequest(githubApiUrl, function(statusCode, response, headers)
        if statusCode == 200 then
            local data = json.decode(response)

            if data and data.tag_name then
                local latestVersion = data.tag_name
                local releaseDate = data.published_at or "Unknown"
                local formattedDate = formatDate(releaseDate)
                local notes = data.body or "No notes available"
                local downloadUrl = data.html_url or "No download link available"
                local shortenedUrl = shortenTexts(downloadUrl)
                local shortenedNotes = shortenTexts(notes)


                local boxWidth = 52

                if latestVersion ~= currentVersion then
                    print('╭────────────────────────────────────────────────────╮')
                    printWrapped('[muhaddil-machines] - New Version Available', boxWidth, '34') -- Blue
                    printWrapped('Current version: ' .. currentVersion, boxWidth, '32')        -- Green
                    printWrapped('Latest version: ' .. latestVersion, boxWidth, '33')          -- Yellow
                    printWrapped('Released: ' .. formattedDate, boxWidth, '33')                -- Yellow
                    printWrapped('Notes: ' .. shortenedNotes, boxWidth, '33')                  -- Yellow
                    printWrapped('Download: ' .. shortenedUrl, boxWidth, '32')                 -- Green
                    print('╰────────────────────────────────────────────────────╯')
                else
                    print('╭────────────────────────────────────────────────────╮')
                    printWrapped('[muhaddil-machines] - Up-to-date', boxWidth, '32')     -- Green
                    printWrapped('Current version: ' .. currentVersion, boxWidth, '32') -- Green
                    print('╰────────────────────────────────────────────────────╯')
                end
            else
                printWithColor('[muhaddil-machines] - Error: The JSON structure is not as expected.', '31') -- Red
                printWithColor('GitHub API Response: ' .. response, '31')                                  -- Red
            end
        else
            printWithColor(
                '[muhaddil-machines] - Failed to check for latest version. Status code: ' .. statusCode, '31') -- Red
        end
    end, 'GET')
end
