function get(url) {
    return fetch(url)
        .then(response => {
            if (!response.ok) {
                throw new Error(`HTTP error! Status: ${response.status}`);
            }
            return response.json();
        })
        .then(data => {
            return data;
        })
        .catch(error => {
            return error;
        });
}
function post(url,  formData, isJSON) {
    return sendPost(url,true,formData,isJSON)
}
function sendPost(url, isFormData, formData, isJSON) {
    var obj = {};
    if (isFormData) {
        obj = {
            method: "POST",
            body: formData
        }
    } else {
        obj = {
            method: "POST",
            headers: {
                'Content-Type': 'application/json'
            },
            body: JSON.stringify(formData)
        }
    }
    return fetch(url, obj)
        .then(response => {
            if (!response.ok) {
                throw new Error("Network response was not ok");
            }
            if (isJSON) {
                return response.json();
            }
            return response.blob();
        })
        .then(blob => {
            if (isJSON) {
                return blob;
            }
            const imageUrl = URL.createObjectURL(blob);
            return imageUrl;
        })
        .catch(error => {
            console.error("There was a problem with the fetch operation:", error);
            throw error;  // 重新抛出错误以便外部捕获
        });
}

function post2blob(url, formData) {
    return fetch(url, {
        method: "POST",
        body: formData
    })
        .then(response => {
            if (!response.ok) {
                throw new Error("Network response was not ok");
            }
            return response.text();
        })
        .then(blob => {
            return blob;
        })
        .catch(error => {
            console.error("There was a problem with the fetch operation:", error);
            throw error;  // 重新抛出错误以便外部捕获
        });
}

function buildFormData(json) {
    const formData = new FormData();

    Object.keys(json).forEach(key => {
        const value = json[key];

        if (Array.isArray(value)) {
            value.forEach((item, index) => {
                formData.append(`${key}[${index}]`, item);
            });
        } else if (value !== null && typeof value === 'object') {
            formData.append(key, value);
        } else {
            formData.append(key, value);
        }
    });
    return formData;
}

//----------------直播配置相关接口
function getLiveVideoList() {
    return get("/live/video/list");
}
function getHttpImage(url) {
    const encode = encodeURI(url);

    const formData = new FormData();
    formData.append("url", encode);
    return post("/file/img", formData, false)
        .then(blob => {
            return blob;
        })
}
function getHttpTmpImage(url) {
    const encode = encodeURI(url);
    const formData = new FormData();
    formData.append("url", encode);
    return post2blob("/file/imgTmp", formData)
        .then(blob => {
            return blob;
        })
}
function addRoomConfig(config) {
    const formData = buildFormData(config)
    return post("/live/config/set", formData, true)
}
function setArrayRoomConfig(rooms, config) {
    var json = {
        "config": config,
        "array": rooms
    }
    return sendPost("/live/config/set/array", false, json, true)
}
function deleteArrayRoomConfig(rooms) {
    return sendPost("/live/config/delete/array", false,rooms, true)
}
function deleteAllRoomConfig() {
    return get("/live/config/delete/all")
}
function getRoomConfig(roomId) {
    return get("/live/config/get?roomId=" + roomId)
}
function deleteRoomConfig(roomId) {
    return get("/live/config/delete?roomId=" + roomId)
}
function checkFollowStatus(userId) {
    return get("/live/config/follow/check?userId=" + userId)
}
function confirmFollowStatus(userId) {
    return get("/live/config/follow/confirm?userId=" + userId)
}
function addAllFollow(userId) {
    return get("/live/config/follow/all?userId=" + userId)
}
function addFollow(uid, anchorId) {
    return get("/live/config/follow/add?anchorId=" + anchorId + "&uid=" + uid)
}
function addFollowList(uid, array) {
    const formData = new FormData();
    formData.append("array", array);
    return post("/live/config/follow/addList?uid=" + uid, formData, true)
}
function addFollowRoomList(array) {
    const formData = new FormData();
    formData.append("array", array);
    return post("/live/config/follow/roomId/addList", formData, true)
}
//----------------直播配置相关接口end
//----------------首页相关接口
function getAllLive(page, limit) {
    return get("/live/list?page=" + page + "&limit=" + limit)
}
function getAllConfig(page, limit) {
    return get("/live/config/all?page=" + page + "&limit=" + limit)
}
//----------------首页相关接口end
//----------------直播视频相关接口
function startLiveVideo(roomId) {
    return get("/live/video/start?roomId=" + roomId)
}
function stopLiveVideo(roomId) {
    return get("/live/video/stop?roomId=" + roomId)
}
function getVideo(roomId, page, limit) {
    return get("/file/list?roomId=" + roomId + "&page=" + page + "&limit=" + limit)
}
function getPlayerVideo(roomId, videoId) {
    return get('/video/play?roomId=' + roomId + "&videoId=" + videoId)
}
//----------------直播视频相关接口end
//----------------弹幕相关接口
function startLiveDanmu(roomId) {
    return get("/live/danmu/start?roomId=" + roomId)
}
function stopLiveDanmu(roomId) {
    return get("/live/danmu/stop?roomId=" + roomId)
}
function getDanmu(roomId, videoId) {
    return get("/live/danmu/get?roomId=" + roomId + "&videoId=" + videoId)
}
//----------------弹幕相关接口end
//----------------用户相关接口
function getBiliAllUser() {
    return get("/user/list")
}
function login() {
    return get("/user/login")
}
function refreshCookie(userId) {
    return get("/user/refreshCookie?uid=" + userId)
}
//----------------用户相关接口end
//----------------礼物相关接口
function getVideoGiftInfo(roomId, videoId) {
    return get("/live/gift/info?roomId=" + roomId + "&videoId=" + videoId)
}
//----------------礼物相关接口end