package common

import (
	"encoding/json"

	"github.com/pkg/errors"
)

// Location represents the location state of the car
type Location struct {
	Altitude  float64 `json:"altitude" redis:"altitude"`
	Longitude float64 `json:"longitude" redis:"longitude"`
	Latitude  float64 `json:"latitude" redis:"latitude"`
	Heading   float64 `json:"-" redis:"heading"`
}

func (l *Location) Marshal() ([]byte, error) {
	data, err := json.Marshal(*l)
	return data, errors.WithStack(err)
}

func (l *Location) Unmarshal(data []byte) error {
	err := json.Unmarshal(data, l)
	return errors.WithStack(err)
}

func (it *Location) MarshalBinary() ([]byte, error) {
	return json.Marshal(it)
}

func (it *Location) UnmarshalBinary(data []byte) error {
	return json.Unmarshal(data, it)
}

type JSONCarLocation struct {
	VIN       string  `json:"vin"`
	Altitude  float64 `json:"altitude"`
	Latitude  float64 `json:"latitude"`
	Longitude float64 `json:"longitude"`
	Heading   float64 `json:"heading"`
}
