import Feature from"../Feature.js";import LineString from"../geom/LineString.js";import TextFeature from"./TextFeature.js";import{get as getProjection}from"../proj.js";import{transformGeometryWithOptions}from"./Feature.js";const B_RECORD_RE=/^B(\d{2})(\d{2})(\d{2})(\d{2})(\d{5})([NS])(\d{3})(\d{5})([EW])([AV])(\d{5})(\d{5})/,H_RECORD_RE=/^H.([A-Z]{3}).*?:(.*)/,HFDTE_RECORD_RE=/^HFDTE(\d{2})(\d{2})(\d{2})/,NEWLINE_RE=/\r\n|\r|\n/;class IGC extends TextFeature{constructor(e){super(),e=e||{},this.dataProjection=getProjection("EPSG:4326"),this.altitudeMode_=e.altitudeMode||"none"}readFeatureFromText(e,t){var s=this.altitudeMode_,r=e.split(NEWLINE_RE);const o={},a=[];let i=2e3,p=0,d=1,u=-1,E,n;for(E=0,n=r.length;E<n;++E){const F=r[E];let n;if("B"==F.charAt(0)){if(n=B_RECORD_RE.exec(F)){var m=parseInt(n[1],10),R=parseInt(n[2],10),c=parseInt(n[3],10);let e=parseInt(n[4],10)+parseInt(n[5],10)/6e4,t=("S"==n[6]&&(e=-e),parseInt(n[7],10)+parseInt(n[8],10)/6e4);if("W"==n[9]&&(t=-t),a.push(t,e),"none"!=s){let e;e="gps"==s?parseInt(n[11],10):"barometric"==s?parseInt(n[12],10):0,a.push(e)}let r=Date.UTC(i,p,d,m,R,c);r<u&&(r=Date.UTC(i,p,d+1,m,R,c)),a.push(r/1e3),u=r}}else"H"==F.charAt(0)&&((n=HFDTE_RECORD_RE.exec(F))?(d=parseInt(n[1],10),p=parseInt(n[2],10)-1,i=2e3+parseInt(n[3],10)):(n=H_RECORD_RE.exec(F))&&(o[n[1]]=n[2].trim()))}if(0===a.length)return null;e=new LineString(a,"none"==s?"XYM":"XYZM");const l=new Feature(transformGeometryWithOptions(e,!1,t));return l.setProperties(o,!0),l}readFeaturesFromText(e,t){e=this.readFeatureFromText(e,t);return e?[e]:[]}}export default IGC;