import grabHostNames from "../package-shared/utils/grab-host-names";

interface Return {
    success: boolean;
    payload: {
        urlPath: string;
        urlThumbnailPath: string;
    } | null;
    msg?: string;
}

type Param = {
    key: string;
    url: string;
    user_id?: string | number;
};

/**
 * # Delete File via API
 */
export default async function deleteFile({
    key,
    url,
    user_id,
}: Param): Promise<Return> {
    const grabedHostNames = grabHostNames();
    const { host, port, scheme } = grabedHostNames;

    try {
        /**
         * Make https request
         *
         * @description make a request to datasquirel.com
         */
        const httpResponse = await new Promise((resolve, reject) => {
            const reqPayload = JSON.stringify({ url: url });

            const httpsRequest = scheme.request(
                {
                    method: "POST",
                    headers: {
                        "Content-Type": "application/json",
                        "Content-Length": Buffer.from(reqPayload).length,
                        Authorization:
                            key ||
                            process.env.DSQL_FULL_ACCESS_API_KEY ||
                            process.env.DSQL_API_KEY,
                    },
                    port,
                    hostname: host,
                    path: `/api/query/${
                        user_id || grabedHostNames.user_id
                    }/delete-file`,
                },

                /**
                 * Callback Function
                 *
                 * @description https request callback
                 */
                (response) => {
                    var str = "";

                    response.on("data", function (chunk) {
                        str += chunk;
                    });

                    response.on("end", function () {
                        resolve(JSON.parse(str));
                    });

                    response.on("error", (err) => {
                        reject(err);
                    });
                }
            );

            httpsRequest.write(reqPayload);
            httpsRequest.end();
        });

        return httpResponse as Return;
    } catch (/** @type {*} */ error: any) {
        console.log("Error deleting file: ", error.message);

        return {
            success: false,
            payload: null,
            msg: error.message,
        };
    }
}