local hls = require "sm.utils.hls"

if ngx.status ~= ngx.HTTP_OK then
    return
end

if ngx.var.uri:match("%.m3u8$") then
    -- 没有配置继承则不做处理
    if not ngx.ctx.auth_m3u8 then
        return
    end
else
    return
end

-- 获取当前响应体数据块和是否是最后一个数据块的标志
local chunk, eof = ngx.arg[1], ngx.arg[2]
-- 尝试获取缓存响应体的上下文变量
local buffered = ngx.ctx.buffered

-- 如果buffered为空（即尚未初始化），则初始化一个空表
if not buffered then
    buffered = {}
    ngx.ctx.buffered = buffered
end

-- 如果当前数据块不为空，则将其插入缓存表中
if chunk ~= "" then
    table.insert(buffered, chunk)
end

-- 如果eof为真（即当前数据块是最后一个数据块），则处理完整的响应体
if eof then
    -- 将缓存表中的所有数据块拼接成完整的响应体
    local whole = table.concat(buffered)

    -- 如果是空返回则不处理
    if whole == {} then
        return
    end

    -- 初始化一个空表用于存储处理后的行
    local new_lines = ""

    -- 处理 M3U8 文件
    if ngx.var.uri:match("%.m3u8$") then
        -- 生成访问秘钥
        new_lines = hls.process_m3u8_file(whole, ngx.ctx.auth_timestamp,ngx.ctx.auth_rand,ngx.ctx.auth_uid,ngx.ctx.auth_key,ngx.ctx.auth_sign)
    end

    -- 处理 MPD 文件
    --if ngx.var.uri:match("%.mpd$") then
    --    new_lines = process_mpd_file(whole, auth_key)
    --end

    -- 将处理后的行拼接成新的响应体，并传递给下一个过滤器
    ngx.arg[1] = new_lines
else
    -- 如果当前数据块不是最后一个数据块，则不处理当前数据块，将其设置为nil
    ngx.arg[1] = nil
end