-- 参数说明
-- KEYS[1]: 缓存键名 (cache_repeat_key)
-- KEYS[2]: 请求URL
-- ARGV[1]: 当前请求参数
-- ARGV[2]: 当前时间戳
-- ARGV[3]: 间隔时间(秒)

-- 获取缓存数据
local cacheData = redis.call('GET', KEYS[1])
local result = false

if cacheData then
    -- 将JSON字符串转为Lua表
    local sessionMap = cjson.decode(cacheData)

    -- 检查是否包含当前URL
    if sessionMap[KEYS[2]] then
        local preDataMap = sessionMap[KEYS[2]]

        -- 比较参数是否相同
        if preDataMap["repeatParams"] == ARGV[1] then
            -- 比较时间间隔
            local time1 = tonumber(ARGV[2])
            local time2 = tonumber(preDataMap["repeatTime"])

            if (time1 - time2) < (tonumber(ARGV[3]) * 1000) then
                result = true
            end
        end
    end
end

if not result then
    -- 创建新的缓存数据
    local nowDataMap = {
        repeatParams = ARGV[1],
        repeatTime = ARGV[2]
    }

    local cacheMap = {}
    if cacheData then
        cacheMap = cjson.decode(cacheData)
    end

    cacheMap[KEYS[2]] = nowDataMap

    -- 设置缓存，带过期时间
    redis.call('SETEX', KEYS[1], tonumber(ARGV[3]), cjson.encode(cacheMap))
end

-- 返回结果：true表示重复提交，false表示不是重复提交
return result
