const http = require('http')

module.exports = class http_client {
    constructor(ip, port) {
        this.#ip = ip
        this.#port = port
    }
    async post(data, callback_answer, callback_error) {
        // Build the post string from an object
        
        // An object of options to indicate where to post to
        var post_options = {
            host: this.#ip,
            port: this.#port,
            method: 'POST',
            headers: {
                'Content-Type': 'applicaiton/json',
                'Content-Length': Buffer.byteLength(data)
            }
        }
        // Set up the request
        var request = http.request(post_options, function(res) {
            res.setEncoding('utf8')
            res.on('data', async function (answer) {
                callback_answer(answer)
            })
        })
        request.on('error', function(e) {
            callback_error(e)
        })
        // post the data
        request.write(data)
        request.end()
        
    }
    #ip
    #port
}

module.exports.post = async (options, callback_res, callback_err) => {
    http.post(options, function(res) {
        var body_chunks = []
        res.on('data', chunk => {
            body_chunks.push(chunk)
        }).on('end', () => {
            var body = Buffer.concat(body_chunks)
            callback_res(body)
        })
    }).on('error', err => {
        callback_err(err)
    })
}

module.exports.get = async (options, callback_res, callback_err) => {
    http.get(options, function(res) {
        var body_chunks = []
        res.on('data', chunk => {
            body_chunks.push(chunk)
        }).on('end', () => {
            var body = Buffer.concat(body_chunks)
            callback_res(body)
        })
    }).on('error', err => {
        callback_err(err)
    })
}