const http = require('http')
const globalVars = require('../libs/globalVars')
const led = require('../libs/led')
const common = require('../libs/common')

const lcd = require('../libs/lcd')

module.exports = {

    getStatus: () => {
        var rest_options = {
            host: '192.168.4.5',
            port: 2020,
            path: '/water/status',
            method: 'GET'
        };

        var request = http.request(rest_options, function (response) {
            var content = "";

            // Handle data chunks
            response.on('data', function (chunk) {
                content += chunk;
            });

            // Once we're done streaming the response, parse it as json.
            response.on('end', async function () {
                var data = JSON.parse(content);
                let waterOn = data.waterOn

                var time = await common.nextEvent(data.nextScheduleEventUtcTime)

                globalVars.waterNextEvent = time

                if (globalVars.waterOn === "" || globalVars.waterOn === "error") {
                    if (waterOn === 'true') {
                        globalVars.waterOn = waterOn
                        lcd.waterStatus('Heating')
                        lcd.waterNextEvent(globalVars.waterNextEvent)
                        led.set('red')
                    } else {
                        globalVars.waterOn = waterOn
                        lcd.waterStatus('Not Heating')
                        led.set('blue')
                        lcd.waterNextEvent(globalVars.waterNextEvent)
                    }
                } else {
                    if (waterOn != globalVars.waterOn) {
                        if (waterOn === 'true') {
                            globalVars.waterOn = waterOn
                            lcd.waterStatus('Heating')
                            led.set('red')
                            lcd.waterNextEvent(globalVars.waterNextEvent)
                        } else {
                            globalVars.waterOn = waterOn
                            lcd.waterStatus('Not Heating')
                            led.set('blue')
                            lcd.waterNextEvent(globalVars.waterNextEvent)
                        }
                    }
                }
            });
        });

        // Report errors
        request.on('error', function (error) {
            lcd.waterStatus('Error')
            led.set('green')
            lcd.waterStatus('Error No Data')
            globalVars.waterOn = 'error'
        });

        request.end();
    }
}