syntax = "proto3";

option go_package = "./proto;location";

// The location service stores GPS points for tracking purposes
// and provides endpoints to query those points.
package location;

service Location {
	// Read locations
	rpc Read(ReadRequest) returns (ReadResponse) {}
	// Save locations
	rpc Save(SaveRequest) returns (SaveResponse) {}
	rpc Search(SearchRequest) returns (SearchResponse) {}
}

// A point is a GPS coordinate.
message Point {
	double latitude = 1;
	double longitude = 2;
	int64 timestamp = 3;
}

message Entity {
        string id = 1;
        string type = 2;
        Point location = 3;
}

// Read an entity by its ID
message ReadRequest {
	// the entity id
	string id = 1;
}

message ReadResponse {
	Entity entity = 1;
}

// Save an entity's current position
message SaveRequest {
	Entity entity = 1;
}

message SaveResponse {
}

// Search for entities in a given radius
message SearchRequest {
	// Central position to search from
	Point center = 1;
	// radius in meters
	double radius = 2;
	// type of entities to filter
	string type = 3;
	// Maximum number of entities to return
	int64 numEntities = 4;
}

message SearchResponse {
	repeated Entity entities = 1;
}
