const fileUploadFuctions = {
    name: '123',
    /**
       * 判断文件是否上传过
       * @param {File | Object} file 文件对象，可能是File可能就是普通对象
       * @returns {Boolean}  文件是否上传过
       */
    isFileRaw(file) {
        let isFileRaw = false;
        isFileRaw = file.status && file.status == "ready";
        return isFileRaw;
    },
    /**
    * 判断formData中是否有数据
    * @param {FormData} formData 文件对象，可能是File可能就是普通对象
    * @returns {Boolean}  formData中是否有数据
    */
    isFormDataHasData(formData) {
        const formDataArr = Array.from(formData.entries(), ([key, prop]) => ({
            [key]: {
                ContentLength: typeof prop === "string" ? prop.length : prop.size,
            },
        }));
        return formDataArr.length > 0;
    },
    /**
     * 获取对应媒体下的文件
     * @param {string} mediaKey 媒体key
     * @returns {Array} 媒体对应的文件
     */
    getMediaFile($el, mediaKey) {
        return $el.$refs[mediaKey].getFiles();
    },

    /**
     * 获取需要上传的FormData
     * @param {Array} mediaKeys 媒体keys数组
     * @returns {FormData} formData 需要上传的formdata
     */
    getNeedUploadFormData($el, mediaKeys) {
        const formData = new FormData();
        const self = this; // 保存正确的 this
        mediaKeys.map((mediaKey) => {
            const currentFileList = self.getMediaFile($el, mediaKey);
            currentFileList.map((file) => {
                if (self.isFileRaw(file)) {
                    formData.append(mediaKey, file.raw);
                }
            });
        });
        return formData;
    },

    /**
     * 获取需要已经存在（数据库已存储的）文件ID对象
     * @param {Array} mediaKeys 媒体keys数组
     * @returns {Object} 已经存在（数据库已存储的）文件ID对象
     */
    getOldIdsObj(mediaKeys, dialogForm) {
        let oldFileIdsObj = {};
        mediaKeys.forEach((key) => {
            if (dialogForm[key]) {
                oldFileIdsObj[key] = dialogForm[key];
            } else {
                oldFileIdsObj[key] = "";
            }
        });
        return oldFileIdsObj;
    },
    /**
     * 获取返回结果中的文件id对象
     * @param {Array} mediaKeys 媒体keys数组
     * @param {Object} requestRes 上传返回的数据对象
     * @returns {Object}  新上传的文件id对象
     */
    getNewIdsObj(mediaKeys, requestRes) {
        let newUploadedFileIdsObj = {};
        mediaKeys.forEach((key) => {
            newUploadedFileIdsObj[key] = this.getResIdStrByMedia(key, requestRes);
        });
        return newUploadedFileIdsObj;
    },

    /**
     * 获取上传返回结果中的id字符串
     * @param {Array} mediaKeys 媒体keys数组
     * @param {Object} requestRes 上传返回的数据对象
     * @returns {string}  新上传的文件id字符串
     */
    getResIdStrByMedia(mediaKey, requestRes) {
        const arr = [];
        requestRes.data.forEach((item) => {
            if (item.fileKey == mediaKey) {
                arr.push(item.fileId);
            }
        });
        const str = arr.length > 0 ? arr.join(",") : "";
        return str;
    },

    /**
     * 获取新旧合并的文件id对象
     * @param {Array} mediaKeys 媒体keys数组
     * @param {Object} oldObj 已经存在的
     * @param {Object} newObj 新上传的
     * @returns {string}  新上传的文件id字符串
     */
    getMergedIdsObj(oldObj, newObj, mediaKeys) {
        const obj = {};
        mediaKeys.forEach((key) => {
            newArr = newObj[key].split(",");
            oldArr = oldObj[key].split(",");
            let fullArr = new Set([...newArr, ...oldArr]);
            let fullStr = fullArr.join(",");
            obj[key] = fullStr;
        });
        return obj;
    },

    /**
     * 获取需要被删除的文件ID合集
     * @param {Array} mediaKeys 媒体keys数组
     * @param {Object} dialogForm 表单对象
     * @param {Object} newUploadedFileIdsObj 最新上传之后的
     * @returns {Object}  新上传的文件id对象
     */
    getDeleteFileArr(oldObj, newObj, mediaKeys) {
        const arr = [];
        mediaKeys.forEach((key) => {
            newArr = newObj[key].split(",");
            oldArr = oldObj[key].split(",");
            let fullArr = new Set([...newArr, ...oldArr]);
            oldArr.forEach((oldId) => {
                if (!fullArr.includes(oldId)) {
                    arr.push(oldId);
                }
            });
        });
        return arr;
    }

}
export default fileUploadFuctions