import Axios from "axios";
import Vue from "vue";

import tokenManager from "../xim/token";

import { invokePost } from "./request";
const orgId = () => Vue.prototype.global.org?.id ?? "0";
export async function uploadFile(
    file: File,
    chatId: number,
    width?: number,
    height?: number
) {
    const splits = file.name.split(".");
    const parameter = {
        file_name: file.name,
        size: file.size,
        introduction: file.name,
        owner_type: "FILE_TYPE_CS",
        owner_id: chatId,
        org_id: orgId(),
        ext_type: splits[splits.length - 1],
    };
    if (width && height) {
        Object.assign(parameter, { width, height });
    }
    const token = await invokePost<{
        url_id: string;
        sign: string;
        domain: string;
        file_name: string;
        id: number;
    }>("/xchat/personal/upload_token", await tokenManager.getToken(), parameter);

    const uri = `${token.domain}/gw/file/upload`;
    const form = new FormData();
    form.append("file", file);
    form.append("fileId", token.url_id);
    form.append("fileSize", file.size.toString());
    form.append("orgId", orgId());
    form.append("sign", token.sign);
    const result = await Axios.post(uri, form, {
        headers: { "Content-Type": "multipart/form-data" },
    });
    if (result && result.data && result.data.errcode === 0) {
        return token.url_id;
    }
    return "";
}