const Router = require("koa-router")
const { getQqListData } = require("../util/getList/qq")
const KoaSSEStream = require('koa-sse-stream');
const { dowload } = require("../util/download");
const { addDownList, getDownList, setDownState } = require("../util/sql/download");
const dayjs = require("dayjs")
const router = new Router()
// const dowloadlist = []

router.get("/getQqList",async (ctx)=>{
    let url = ctx.query.url
    let videoid = url.split("/")
    for(let i in videoid){
        if(videoid[i] == "cover"){
            videoid = videoid[i + 1].replace(".html") 
            break
        }
    }
    let list = await getQqListData(url)
    ctx.body = list
})

router.get("/startDown",async (ctx)=>{
    let title = ctx.query.title
    let url = ctx.query.url
    let save = ctx.query.save
    // dowloadlist.push({
    //     title,url,save
    // })
    // startDown()
    addDownList(title,url,save,new Date().getTime(),0)
    ctx.body={
        code:0,
        msg:"添加成功"
    }
})
// 连接池
const clientList = [];
// koa-sse-stream 配置
const SSE_CONF = {
    maxClients: 5, // 最大连接数
    pingInterval: 40000 // 重连时间
}
router.get('/msg', KoaSSEStream(SSE_CONF), ctx => {
    // 每次连接会进行一个 push
    clientList.push(ctx.sse);
    if(clientList.length > 5){
        // 超过5个删除最开始的一个
        // todo 浏览器关闭后自动检测删除
        clientList.shift()
    }
})
let start = false
function startDown(data){
    start = true
    dowload(data,async (data2,isok)=>{
        let name = data2.title
        clientList.forEach((i)=>{
            i.send(isok ? `${name}下载完成` : data2 )
        })
        if(isok){
            // dowloadlist.shift()
            await setDownState(data.id,1)
            start = false
        }
    })
}
setInterval(async ()=>{
    let dowloadlist = await getDownList()
    if(dowloadlist.length != 0 && !start){
        startDown(dowloadlist[0])
    }else if(dowloadlist.length == 0){
        start = false
    }
},1000)
module.exports = router