package com.brejza.matt.habmodem;
import java.util.List;
import java.util.TreeMap;
import org.mapsforge.core.GeoPoint;
import ukhas.AscentRate;
import ukhas.Gps_coordinate;
import ukhas.TelemetryConfig;
import ukhas.Telemetry_string;
public class Payload implements java.io.Serializable{
private static final long serialVersionUID = 0x5901fa8c0e38abb2L;
public String callsign;
String _payloadID;
String _flightID;
boolean _isActiveFlight = false;
boolean _useFlightView = false;
boolean _activePayload = false;
int _total300 = 0;
int _total50 = 0;
public int colour = 0;
private int _extraFields;
double maxAltitude = -9999999;
public TelemetryConfig telemetryConfig = null;
public List<GeoPoint> predictedPath = null;
public long lastPredictionGetTime = 0;
public Gps_coordinate lastPredictionLocation = null;
int _maxLookBehind = 4*24*60*60;
int _maxRecords = 3000;
long _lastUpdated = 0;
long _query_ongoing = 0; //set to 0 for no query (datafetch), otherwise timestamp of query
public TreeMap<Long,Telemetry_string> data = new TreeMap<Long,Telemetry_string>();
public AscentRate ascentRate = new AscentRate();
public Payload(String call, int _colour, boolean activePayload, int lookBehind)
{
callsign = call;
_activePayload = activePayload;
_maxLookBehind = lookBehind;// * 24*60*60;
colour = _colour;
}
public Payload(String call, int _colour, boolean activePayload)
{
callsign = call;
_activePayload = activePayload;
colour = _colour;
}
public Payload(String call, String payloadID, String flightID)
{
callsign = call;
_payloadID = payloadID;
_flightID = flightID;
_isActiveFlight = true;
_activePayload = false;
}
public Payload(String call, String payloadID)
{
callsign = call;
_payloadID = payloadID;
_activePayload = false;
}
public Payload(Telemetry_string str, int _colour){
callsign = str.callsign;
if (str.time != null)
data.put(Long.valueOf(str.time.getTime()), str);
_activePayload = true;
colour = _colour;
}
public void setFlightID(String id){
_flightID = id;
}
public void setNewColour(int _colour)
{
colour = _colour;
}
public String getFlightID(){
return _flightID;
}
public void setPayloadID(String id){
_payloadID = id;
}
public String getPayloadID(){
return _payloadID;
}
public void setMaxLookBehindDays(int t){
_maxLookBehind = t * 60*60*24;
}
public void setMaxLookBehindSecs(int t){
_maxLookBehind = t;
}
public void setMaxLookBehind(int t){
_maxLookBehind = t;
}
public long getLastUpdated(){
return _lastUpdated;
}
public void setMaxRecords(int max){
_maxRecords = max;
}
public boolean isActivePayload(){
return _activePayload;
}
public void setIsActivePayload(boolean ap){
_activePayload = ap;
}
public int getMaxRecords(){
return _maxRecords;
}
public long getUpdateStart(boolean flightView) {
if (_lastUpdated == 0){
if (flightView)
return 0;
else
return (System.currentTimeMillis()/1000 - _maxLookBehind);
}
else
return _lastUpdated;
}
public void setLastUpdated(long t){
_lastUpdated = t;
_activePayload = true;
}
public void setLastUpdatedNow(){
_lastUpdated = System.currentTimeMillis()/1000;
_activePayload = true;
}
public Telemetry_string getLastString() {
if (data.size() > 0)
{
return data.lastEntry().getValue();
}
else
return null;
}
public long getLastTime() {
if (data.size() > 0)
{
return Long.valueOf(data.lastKey());
}
else
return 0;
}
public double getAscentRate(){
return ascentRate.getAscentRate();
}
public void putPacket(Telemetry_string str) {
if (str.time != null){
data.put(str.time.getTime(), str);
if (str.coords.alt_valid && str.checksum_valid)
ascentRate.addData(str.time.getTime(), str.coords.altitude);
}
}
public void putPackets( TreeMap<Long,Telemetry_string> in){
if (in == null)
return;
if (in.size() < 1)
return;
data.putAll(in);
Gps_coordinate c = data.lastEntry().getValue().coords;
if (c.alt_valid)
ascentRate.addData(data.lastEntry().getValue().time.getTime(),c.altitude);
}
public void clearUserData(){
data = new TreeMap<Long,Telemetry_string>();
_activePayload = false;
_lastUpdated = 0;
ascentRate = new AscentRate();
}
public void putMaxAltitude(double altitude)
{
maxAltitude = Math.max(maxAltitude, altitude);
}
public double getMaxAltitude()
{
return maxAltitude;
}
public long getQueryOngoing()
{
return _query_ongoing;
}
public void setQueryOngoing(long l)
{
_query_ongoing = l;
}
public int getNumberExtraFields()
{
return _extraFields;
}
}