import https from "https";
import BaseData from "./baseData";

class MakeRequest {

    static parseToJSON(dataToParse: any): any {
        let data = null;
        try {
            data = JSON.parse(dataToParse);
        } catch (e) {
            data = dataToParse;
        }
        return data;
    }

    static httpRequest(apiURL:string, method: string, postData: any, params: any) {
        if(params) {
            apiURL += new URLSearchParams(params).toString();
        }

        const options = {
            hostname: 'api.mims.com',
            port: 443,
            path: apiURL,
            method: `${method}`,
            body: postData,
            redirect: 'follow',
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded',
                'Authorization': `${BaseData.getAccessTokenData()?.tokenType} ${BaseData.getAccessTokenData()?.accessToken}`,
                'api-key': `${BaseData.getAPIKey()}`
            },
        };

        return new Promise((resolve) => {
            const req = https.request(options, res => {

                let data = '';

                res.on('data', chunk => {
                    data += chunk;
                });

                res.on('end', () => {
                    if(res.statusCode === 200) {
                        const jsonData = this.parseToJSON(data);
                        resolve(jsonData);
                    } else {
                        resolve({
                            statusCode: res.statusCode,
                            statusMessage: res.statusMessage,
                        });
                    }
                });
            }).on('error', error => {
                resolve(error);
            });

            if (postData) {
                req.write(postData.toString());
            }

            req.end();
        })
    }
}

export default MakeRequest;