package parser

import (
	"bufio"
	"encoding/json"
	"fmt"
	"strconv"
)

// JSONParser reads the json output
type JSONParser struct {
	Reader *bufio.Reader
}

// {"time" : "2018-04-13 23:04:50", "model" : "Acurite 606TX Sensor", "id" : -5, "battery" : "OK", "temperature_C" : 21.800}
type jsonPacket struct {
	Time          string
	Model         string
	ID            int
	Battery       string
	Temperature_C float64
}

// Measure returns the temperature. Null if it can't
func (jp JSONParser) Measure() (*Measurement, error) {
	text, err := jp.Reader.ReadString('\n')
	if err != nil {
		return nil, err
	}
	buffer := []byte(text)
	if json.Valid(buffer) {
		var jsonPacket jsonPacket

		err = json.Unmarshal(buffer, &jsonPacket)
		if err != nil {
			fmt.Println(err.Error())
			return nil, err
		}
		fmt.Println("temp is " + strconv.FormatFloat(jsonPacket.Temperature_C, 'f', 6, 64))
		return &Measurement{ID: jsonPacket.ID, Temperature: jsonPacket.Temperature_C}, nil
	}
	return nil, nil
}