var isClient="undefined"!=typeof window&&window.document,isLambda="undefined"!=typeof process&&!!process.env.LAMBDA_TASK_ROOT;if(isClient)var CscopeInfo=window.CscopeInfo||{},log={logInfo:function(e){console.log("CScope Info:",e)},logError:function(e){console.log("CScope Error:",e)},logWarn:function(e){console.log("CScope Warn:",e)}},locationFunctions={getLatitude:function(){return 0},getLongitude:function(){return 0}},timeDate={getPinDate:function(e){return new Date(e).toDateString()},getPinTime:function(e){return new Date(e).toTimeString()}};else{var moment=require("moment-timezone"),coordSimplify=require("mh-simplify-coordinates");if(isLambda){log=require("./log");var mapFunctions=require("./mapFunctions"),fileFunctions=(timeDate=require("./timeDate"),require("./fileFunctions"))}else log=require("main_windows/log"),mapFunctions=require("main_windows/mapFunctions"),timeDate=require("main_windows/timeDate"),fileFunctions=require("main_windows/fileFunctions")}if(isClient){var reportFunctions={};reportFunctions.getReportList=getReportList,reportFunctions.tripToReportTable=tripToReportTable,reportFunctions.startOfDecade=startOfDecade,reportFunctions.evaluateFilter=evaluateFilter,reportFunctions.initialiseReportTable=initialiseReportTable,reportFunctions.simplifyMap=simplifyMap,reportFunctions.startOfDecade=startOfDecade,reportFunctions.endOfDecade=endOfDecade,reportFunctions.decodeMessage=decodeMessage}else exports.getReportList=getReportList,exports.tripToReportTable=tripToReportTable,exports.startOfDecade=startOfDecade,exports.evaluateFilter=evaluateFilter,exports.initialiseReportTable=initialiseReportTable,exports.simplifyMap=simplifyMap,exports.startOfDecade=startOfDecade,exports.endOfDecade=endOfDecade,exports.decodeMessage=decodeMessage;var reportList={summary:{title:"Locator Mode Summary",name:"locatorSummary",type:"pie",zoomInReportKey:"timeline",deviceList:[{model:"CXL",generation:"4"},{model:"DXL",generation:"4"},{model:"MXL",generation:"4"}],schemaKey:"locatorUsageByMode"},summaryFrequency:{title:"Locator Frequency Summary",name:"locatorSummaryFrequency",type:"pie",zoomInReportKey:"timelineFrequency",deviceList:[{model:"CXL",generation:"4"},{model:"DXL",generation:"4"},{model:"MXL",generation:"4"}],schemaKey:"locatorUsageByFrequency"},timeline:{title:"Locator Mode Timeline",name:"locatorTimeline",type:"timeline",deviceList:[{model:"CXL",generation:"4"},{model:"DXL",generation:"4"},{model:"MXL",generation:"4"}],schemaKey:"locatorUsageByMode"},timelineFrequency:{title:"Locator Frequency Timeline",name:"locatorTimelineFrequency",type:"timeline",deviceList:[{model:"CXL",generation:"4"},{model:"DXL",generation:"4"},{model:"MXL",generation:"4"}],schemaKey:"locatorUsageByFrequency"},depth:{title:"Locator Depth",name:"locatorDepth",type:"path",deviceList:[{model:"CXL",generation:"4"},{model:"DXL",generation:"4"},{model:"MXL",generation:"4"}],schemaKey:"locatorDepthByDistance"},sensitivityPath:{title:"Locator Sensitivity",name:"locatorSensitivity",type:"path",deviceList:[{model:"CXL",generation:"4"},{model:"DXL",generation:"4"},{model:"MXL",generation:"4"}],schemaKey:"locatorSensitivityByDistance"},map:{title:"Locator Map",name:"locatorMap",type:"map",deviceList:[{model:"CXL",generation:"4"},{model:"DXL",generation:"4"},{model:"MXL",generation:"4"}],schemaKey:"locatorMap"},transmitterConnectionSummary:{title:"Transmitter Connection Summary",name:"transmitterConnectionSummary",type:"pie",zoomInReportKey:"transmitterConnectionTimeline",deviceList:[{model:"SGV",generation:"4"},{model:"SGA",generation:"4"},{model:"MXT",generation:"4"}],schemaKey:"transmitterUsageByConnection"},transmitterConnectionTimeline:{title:"Transmitter Connection Timeline",name:"transmitterConnectionTimeline",type:"timeline",deviceList:[{model:"SGV",generation:"4"},{model:"SGA",generation:"4"},{model:"MXT",generation:"4"}],schemaKey:"transmitterUsageByConnection"},transmitterFrequencySummary:{title:"Transmitter Frequency Summary",name:"transmitterFrequencySummary",type:"pie",zoomInReportKey:"transmitterFrequencyTimeline",deviceList:[{model:"SGV",generation:"4"},{model:"SGA",generation:"4"},{model:"MXT",generation:"4"}],schemaKey:"transmitterUsageByFrequency"},transmitterFrequencyTimeline:{title:"Transmitter Frequency Timeline",name:"transmitterFrequencyTimeline",type:"timeline",deviceList:[{model:"SGV",generation:"4"},{model:"SGA",generation:"4"},{model:"MXT",generation:"4"}],schemaKey:"transmitterUsageByFrequency"}},reportSchemaList={locatorUsageByMode:{filterKey:"isLocator",columns:{mode:{title:"Mode",type:"string"},time:{title:"Time",type:"number"}},rows:{power:{title:"Power",type:"number",filterKey:"locatorPowerMode",operation:"count",scale:1e3},radio:{title:"Radio",type:"number",filterKey:"locatorRadioMode",operation:"count",scale:1e3},generator:{type:"number",title:"Generator",filterKey:"locatorGeneratorMode",operation:"count",scale:1e3},allScan:{title:"All Scan",type:"number",filterKey:"locatorAllScanMode",operation:"count",scale:1e3},other:{type:"number",operation:"count",scale:1e3}}},locatorUsageByFrequency:{filterKey:"isLocator",columns:{mode:{title:"Frequency",type:"string"},time:{title:"Time",type:"number"}},rows:{freq0:{title:"512 Hz",type:"number",filterKey:"locator512Hz",operation:"count",scale:1e3},freq1:{title:"640 Hz",type:"number",filterKey:"locator640Hz",operation:"count",scale:1e3},freq2:{title:"33 kHz",type:"number",filterKey:"locator33kHz",operation:"count",scale:1e3},freq3:{title:"131 kHz",type:"number",filterKey:"locator131kHz",operation:"count",scale:1e3},other:{type:"number",filterKey:"locatorOtherFrequency",operation:"count",scale:1e3}}},locatorDepthByDistance:{filterKey:"isLocator",columns:{distance:{title:"Distance",type:"number"}},rows:{depth:{title:"Depth",type:"number",filterKey:"locatorValidDepth",scale:.01}}},locatorSensitivityByDistance:{filterKey:"isLocator",columns:{distance:{title:"Distance",type:"number"}},rows:{sensitivity:{title:"Sensitivity",type:"number"},bargraph:{title:"Signal",type:"number"}}},locatorMap:{filterKey:"isLocator",rows:{mode:{title:"Mode",type:"number"},serial:{title:"Serial",type:"number"},model:{title:"Model",type:"string"},type:{title:"Type",type:"string"}}},transmitterUsageByConnection:{filterKey:"isTransmitter",columns:{mode:{title:"Mode",type:"string"},time:{title:"Time",type:"number"}},rows:{connected:{title:"Connected",type:"number",filterKey:"transmitterConnected",operation:"interval"},induced:{title:"Induced",type:"number",filterKey:"transmitterInduced",operation:"interval"},other:{type:"number",operation:"interval"}}},transmitterUsageByFrequency:{filterKey:"isTransmitter",columns:{mode:{title:"Frequency",type:"string"},time:{title:"Time",type:"number"}},rows:{freq0:{title:"512 Hz",type:"number",filterKey:"transmitter512Hz",operation:"count",scale:1e3},freq1:{title:"640 Hz",type:"number",filterKey:"transmitter640Hz",operation:"count",scale:1e3},freq2:{title:"33 kHz",type:"number",filterKey:"transmitter33kHz",operation:"count",scale:1e3},freq3:{title:"131 kHz",type:"number",filterKey:"transmitter131kHz",operation:"count",scale:1e3},freq4:{title:"CF",type:"number",filterKey:"transmitterCF",operation:"count",scale:1e3},other:{type:"number",filterKey:"transmitterOtherFrequency",operation:"count",scale:1e3}}}},reportFilterList={isLocator:[{key:"model",test:"in",values:["CXL","DXL","MXL"]},{key:"generation",test:"=",value:"4"}],locatorPowerMode:[{key:"mode",test:"=",value:"0"}],locatorRadioMode:[{key:"mode",test:"=",value:"1"}],locatorGeneratorMode:[{key:"mode",test:"=",value:"2"}],locatorAllScanMode:[{key:"mode",test:"=",value:"3"}],transmitter512Hz:[{key:"frequency",test:"=",value:"0"}],transmitter640Hz:[{key:"frequency",test:"=",value:"1"}],transmitter8kHz:[{key:"frequency",test:"=",value:"2"}],transmitter33kHz:[{key:"frequency",test:"=",value:"3"}],transmitter131kHz:[{key:"frequency",test:"=",value:"4"}],transmitterCF:[{key:"frequency",test:"=",value:"5"}],transmitterOtherFrequency:[{key:"frequency",test:">",value:"5"}],locator512Hz:[{key:"frequency",test:"=",value:"0"},{key:"mode",test:"=",value:"2"}],locator640Hz:[{key:"frequency",test:"=",value:"1"},{key:"mode",test:"=",value:"2"}],locator33kHz:[{key:"frequency",test:"=",value:"2"},{key:"mode",test:"=",value:"2"}],locator131kHz:[{key:"frequency",test:"=",value:"3"},{key:"mode",test:"=",value:"2"}],locatorOtherFrequency:[{key:"mode",test:">",value:"3"}],locatorValidDepth:[{key:"depth",test:"!=",value:0}],isTransmitter:[{key:"model",test:"in",values:["SGV","SGA","MXT"]},{key:"generation",test:"=",value:"4"}],isTransmitterWithControlByte:[{key:"model",test:"in",values:["SGV","SGA","MXT"]},{key:"generation",test:"=",value:"4"}],transmitterConnected:[{key:"isConnected",test:"=",value:1}],transmitterInduced:[{key:"isConnected",test:"=",value:0}]};function getReportList(){return reportList}function getReportSchemaList(){return reportSchemaList}function getReportFilterList(){return reportFilterList}function tripToReportTable(e,t,i,o){var r;if(log.logInfo("tripToReportTable for report "+e+" in loa "+i+" locale "+o),!(e in(reportList=getReportList())))return log.logInfo("report name "+e+" not in reportList"),{};if(!("type"in reportList[e]))return log.logInfo("report type missing from reportList for report "+reportList[e].title),{};switch(reportList[e].type){case"pie":r=getPieTables(reportList[e].schemaKey,t);break;case"timeline":r=getTimelineTables(reportList[e].schemaKey,t,i,o);break;case"path":r=getPathTables(reportList[e].schemaKey,t,o);break;case"map":r=getMapTables(reportList[e].schemaKey,t,o);break;default:r=null}return r.report=getReportMetadata(e),r}function getPathTables(e,t,i){log.logInfo("getPathTables "+e+" "+i),t.sort(lhs,rhs,function(){lhs.datetime,rhs.datetime});var o,r=[],n=null,a=null,s=0,l=0;if(e in(reportSchemaList=getReportSchemaList())){for(var c in t){thisPin=t[c];var m=!(o=!1);for(var u in reportSchemaList[e].rows){var d=u;"filterKey"in(p=reportSchemaList[e].rows[u])&&1!=evaluateFilter(p.filterKey,thisPin)&&(m=!1),"dataKey"in p&&(d=p.dataKey),""!=d&&d in thisPin&&!isNaN(thisPin[d])&&(o=!0)}if(o&&m){for(var u in null==n||isNaN(thisPin.longitude)||isNaN(thisPin.latitude)||0==thisPin.longitude&&0==thisPin.latitude||(s+=1e3*mapFunctions.getDistanceFromLatLonInKm(thisPin.latitude,thisPin.longitude,n,a)),isNaN(thisPin.longitude)||isNaN(thisPin.latitude)||0==thisPin.longitude&&0==thisPin.latitude||(n=thisPin.latitude,a=thisPin.longitude),r.push(createRow(e,"path")),r[l].datetime=moment.tz(thisPin.datetime,i).format(),r[l].distance=s,r[l].latitude=thisPin.latitude,r[l].longitude=thisPin.longitude,reportSchemaList[e].rows){var p;d=u;"dataKey"in(p=reportSchemaList[e].rows[u])&&(d=p.dataKey),d in thisPin&&!isNaN(thisPin[d])&&0!=thisPin[d]&&(r[l][u]="scale"in p?p.scale*thisPin[d]:1*thisPin[d])}l++}}log.logInfo("Path Data "+JSON.stringify(r));var y=mapFunctions.removeZerosFromTrip(r);return log.logInfo("Path Data No Zeroes "+JSON.stringify(y)),{tableData:y,schema:getSchemaMetadata(e,"path")}}log.logInfo("schema "+e+" missing from report schema list")}function createRow(e,t){var i={};if(!(e in(reportSchemaList=getReportSchemaList())))return log.logError("createRow reportSchemaList "+e+" not found in reportSchemaList"),{};switch(t){case"pie":i.other=0;break;case"timeline":i.start=(new Date).getTime(),i.end=(new Date).getTime(),i.other=0;break;case"path":i.latitude=0,i.longitude=0,i.distance=0;break;case"map":i.latitude=0,i.longitude=0,i.datetime=0}for(var o in reportSchemaList[e].rows)if(thisRow=reportSchemaList[e].rows[o],"pie"!=t||"other"!=o)switch(thisRow.type){case"number":i[o]=0;break;case"string":i[o]="";break;case"datetime":i[o]=new Date;break;default:i[o]=""}return i}function initialiseTimelineReportTable(e,t,i,o){var r,n,a=[];switch("Week"==t?(r=moment.tz(o,i).startOf("isoWeek"),moment.tz(o,i).endOf("isoWeek")):"Decade"==t?(r=startOfDecade(moment.tz(o,i)),endOfDecade(moment.tz(o,i))):(r=moment.tz(o,i).startOf(t.toLowerCase()),moment.tz(o,i).endOf(t.toLowerCase())),t){case"Hour":n=60;break;case"Day":n=24;break;case"Week":n=7;break;case"Month":n=moment(o).daysInMonth();break;case"Year":n=12;break;case"Decade":n=10;break;default:n=30}for(var s={Decade:"years",Year:"months",Month:"days",Day:"hours",Week:"days",Hour:"minutes"},l=0;l":i=i&&t[thisCondition.key]>thisCondition.value;break;case"<":i=i&&t[thisCondition.key]=":i=i&&t[thisCondition.key]>=thisCondition.value;break;case"<=":i=i&&t[thisCondition.key]<=thisCondition.value;break;case"in":i=i&&thisCondition.values.includes(t[thisCondition.key]);break;case"not in":i=i&&!thisCondition.values.includes(t[thisCondition.key])}}return returnValue=i?1:0,returnValue}function getPieTables(e,t){log.logInfo("getPieTables "+e);var i=createRow(e,"pie");log.logInfo("Table Data "+JSON.stringify(i));var o={};for(var r in t)thisPin=t[r],addPinToPieRow(e,thisPin,i,o);var n=getSchemaMetadata(e,"pie");return log.logInfo("getPieTables data "+JSON.stringify(i)),log.logInfo("getPieTables schema "+JSON.stringify(i)),{otherColumnUsed:0!=i.other,tableData:i,schema:n}}function getTimelineTables(e,t,i,o){log.logInfo("getTimelineTables "+e+" "+i+" "+o);var r=getSchemaMetadata(e,"timeline");if(null==t||0==t.length){log.logError("getTimelineTable no pins");var n=createRow(e,"timeline");return a.push(n),{otherColumnUsed:s,tableData:a,schema:r}}var a=initialiseTimelineReportTable(e,i,o,t[0].datetime),s=!1;for(var n in a){thisBucket=a[n];var l={};for(var c in t)thisPin=t[c],moment(thisPin.datetime).isBetween(thisBucket.start,thisBucket.end,void 0,"[]")&&(addPinToPieRow(e,thisPin,thisBucket,l),0!=thisBucket.other&&(s=!0))}return log.logInfo("getTimelineTables "+JSON.stringify(a)),{otherColumnUsed:s,tableData:a,schema:r}}function addPinToPieRow(e,t,i,o){var r=!0,n=0;if(null!=i)if(e in(reportSchemaList=getReportSchemaList())){for(var a in reportSchemaList[e].rows){var s=reportSchemaList[e].rows[a];if("other"!=a)if("filterKey"in s)if("operation"in s||(log.logInfo("addPinToPieRow operation missing from row "+s),s.operation="count"),a in i)switch(evaluateFilter(s.filterKey,t)){case 1:r=!1,i[a]+=processPieRow(a,s,t,o);break;case 0:a in o&&(i[a]+=t.datetime-o[a],delete o[a])}else log.logInfo("addPinToPieRow key "+a+" not found in row "+JSON.stringify(i));else log.logInfo("addPinToPieRow filterKey missing from row "+s)}r&&(n=processPieRow("other",reportSchemaList[e].rows.other,t,i,o),"filterKey"in reportSchemaList[e].rows.other&&1==evaluateFilter(s.filterKey,t)&&(i.other+=n))}else log.logError("addPinToPieRow schemaKey "+e+" not in reportSchemaList");else log.logError("addPinToPieRow row is undefined")}function processPieRow(e,t,i,o){switch(result=0,t.operation){case"count":result="scale"in t?t.scale:1;break;case"sum":if(!("dataKey"in t)){result=0;break}result="scale"in t?i[t.dataKey]*t.scale:i[t.dataKey];break;case"interval":"lastRowKey"in o&&(o.lastRowKey in o?e==o.lastRowKey?(result=i.datetime-o[o.lastRowKey],o[o.lastRowKey]=i.datetime):result=i.datetime-o[o.lastRowKey]:log.logError("processPieRow last row key of "+o.lastRowKey+" has no stored start time")),o[e]=i.datetime,o.lastRowKey=e;break;default:result=0}return result}function getMapTables(e,t,i){for(var o=[],r=0;r