package models

import "github.com/jinzhu/gorm"

// Location holds latitude and longitude.
type Location struct {
	Lat float64 `json:"lat"`
	Lon float64 `json:"lon"`
}

// ImportantInfo holds fields that are important for quick access.
type SensorData struct {
	IMEI        string   `json:"imei"`
	IMSI        string   `json:"imsi"`
	Timestamp   int64    `json:"timestamp"`
	Lat         float64  `json:"lat"`
	Lon         float64  `json:"lon"`
	WifiLoc     Location `json:"wifi_location"`
	CellLoc     Location `json:"cell_location"`
	Temperature float64  `json:"temperature"`
	// Used to parse incoming json data
	AccInfo AccelerometerInfo `json:"accelerometerInfo"`
	// Used to store coordinates of accelerometer to DB 
	AccelerometerInfo
}

type DeviceInfo struct {
	gorm.Model
	RawJSON string `json:"raw_json" gorm:"type:json"`
	SensorData
	DeviceID uint
	ExternalDeviceID string `json:"deviceId"`
}


type AccelerometerInfo struct {
	X int64
	Y int64
	Z int64
}

type GeoJSONFeatureCollection struct {
	Type     string           `json:"type"`
	Features []GeoJSONFeature `json:"features"`
}

type GeoJSONFeature struct {
	Type       string                 `json:"type"`
	Geometry   GeoJSONGeometry        `json:"geometry"`
	DeviceInfo *DeviceInfo			  `json:",omitempty"`			
	Properties map[string]interface{} `json:"properties"`
}

type GeoJSONGeometry struct {
	Type        string    `json:"type"`
	Coordinates []float64 `json:"coordinates"`
}


func (DeviceInfo) Update() (bool, error) {
	return false, nil
}
func (DeviceInfo) Create() (bool, error) {
	return false, nil
}
func (DeviceInfo) Delete() (bool, error) {
	return false, nil
}



