/* COPYRIGHT Esri - https://js.arcgis.com/5.1.2/LICENSE.txt */
import{__decorate as e}from"tslib";import r from"../../../../core/Accessor.js";import t from"../../../../core/Error.js";import{destroyMaybe as s}from"../../../../core/maybe.js";import{throwIfAborted as o,createAbortError as i}from"../../../../core/promiseUtils.js";import{difference as a}from"../../../../core/SetUtils.js";import{parseWhereClause as u}from"../../../../core/sql.js";import{property as l,subclass as n}from"../../../../core/accessorSupport/decorators.js";import{fromFeatureSetJSON as c}from"../../../../layers/graphics/dehydratedFeatures.js";import{canConvertSqlRelativeTime as y,sqlRelativeTimeToAbsolute as p}from"../../../../layers/support/relativeTimeQueryUtils.js";import{queueAutoPriority as d}from"../../../../request/queue.js";import{runQuery as h,executeQuery as m,executeQueryForCount as f}from"../../../../rest/query/operations/query.js";import{PBFDecoder as w}from"../../support/PBFDecoder.js";let F=class extends r{constructor(e){super(e)}get implicitFields(){const e=this.layer.outFields?.includes("*");if(!e)return new Set;const r=new Set(this.layerView.requiredFields),t=new Set(this.layerView.availableFields);return a(t,r)}async queryFeaturesDehydrated(e,r){const{layer:t}=this,s=t.capabilities,a=s?.query?.supportsFormatPBF,l=t.parsedUrl,n=y(e.where)?await p(t.fieldsIndex,e.where,s.query.relativeTimeBinWindow):e.where,d=e.where;let f;if(n!==e.where&&((e=e.clone()).where=n),a){null==this._decoder&&(this._decoder=new w(this.controller));const s={sourceSpatialReference:t.spatialReference?.toJSON()??null,applyTransform:!0,maxStringAttributeFields:this.implicitFields,maxStringAttributeLength:v};f=await h(l,e,"pbf",this._createRequestOptions(r)).then(e=>(o(r),null!=this._decoder?this._decoder.invoke({buffer:e,options:s},r.signal):Promise.reject(i())))}else f=await m(l,e,t.spatialReference,this._createRequestOptions(r)).then(e=>c(e,{maxStringAttributeFields:this.implicitFields,maxStringAttributeLength:v}));if(d&&e.where!==d){const e=await this.controller.schedule(()=>u(d,this.layer.fieldsIndex),r.signal);f.features=await this.controller.schedule(()=>f.features.filter(r=>e.testFeatureCompiled(r)),r.signal)}return f}queryFeatureCount(e,r){return f(this.layer.parsedUrl,e,this._createRequestOptions(r))}destroy(){this._decoder=s(this._decoder)}_createRequestOptions(e){return{...d,...e,query:{...this.layer.customParameters,token:this.layer.apiKey,...e?.query}}}};e([l({constructOnly:!0})],F.prototype,"layer",void 0),e([l({constructOnly:!0})],F.prototype,"layerView",void 0),e([l({constructOnly:!0})],F.prototype,"controller",void 0),e([l({readOnly:!0})],F.prototype,"implicitFields",null),F=e([n("esri.views.3d.layers.support.featureTileQuery3D.FeatureTileServiceQuery3D")],F);let q=class extends r{constructor(e){super(e)}queryFeaturesDehydrated(e,r){return this.layer.queryFeatures(e,r)}};e([l({constructOnly:!0})],q.prototype,"layer",void 0),q=e([n("esri.views.3d.layers.support.featureTileQuery3D.FeatureTileOGCServiceQuery3D")],q);let g=class extends r{constructor(e){super(e)}queryFeaturesDehydrated(e,r){return this.layer.source.queryFeaturesJSON(e,r).then(c,t=>{if(t&&"query-features-json:unsupported"===t.name)return this.layer.queryFeatures(e,r);throw t})}queryFeatureCount(e,r){return this.layer.queryFeatureCount(e,r)}};function j(e,r){const{layer:s}=e;switch(s.type){case"feature":switch(s.source.type){case"feature-layer":return new F({layer:s,layerView:e,controller:r});case"memory":return new g({layer:s});case"csv":case"geojson":case"oriented-imagery":case"wfs":case"ogc-feature":case"parquet":break;default:s.source.type}break;case"catalog-footprint":return new F({layer:s,layerView:e,controller:r});case"csv":case"geojson":case"oriented-imagery":case"wfs":return new g({layer:s});case"ogc-feature":return new q({layer:s})}throw new t("feature-layer:unsupported",`Unsupported Feature layer type ${e.layer.type}:${e.layer.source.type}`)}e([l({constructOnly:!0})],g.prototype,"layer",void 0),g=e([n("esri.views.3d.layers.support.featureTileQuery3D.FeatureTileClientQuery3D")],g);const v=1024;export{j as createFeatureTileQuery3D};
