/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.24/esri/copyright.txt for details. */ import o from"../../core/Error.js";import t from"../../core/has.js";import{isSome as r,isNone as e}from"../../core/maybe.js";import{whenOrAbort as i}from"../../core/promiseUtils.js";import{DataLayerSource as n}from"../../layers/support/source/DataLayerSource.js";import{executeRawQueryJSON as a}from"./executeQueryJSON.js";import{executeRawQueryPBF as s}from"./executeQueryPBF.js";import f from"../support/FeatureSet.js";import u from"../support/Query.js";async function c(o,t,r,e){return m(o,t,r,e).then((o=>p(t,o,r,e)))}async function m(o,r,e,i){const n={...i},f=d(r,e),u=null!=r.outStatistics?.[0],c=t("featurelayer-pbf-statistics"),m=!u||c;let p;if("pbf"===e.format&&m)try{p=await s(o,f,n)}catch(y){if("query:parsing-pbf"!==y.name)throw y;e.format="json"}return"json"!==e.format&&m||(p=await a(o,f,n)),l(e.fieldsIndex,p.fields),p}function l(o,t){if(r(o)&&r(t))for(const r of t){const t=o.get(r.name);t&&Object.assign(r,t.toJSON())}}async function p(o,t,r,n){if(!y(o,r?.infoFor3D)||e(r.infoFor3D)||!t.features||!t.features.length)return f.fromJSON(t);const{meshFeatureSetFromJSON:a}=await i(import("../support/meshFeatureSet.js"),n);return a(o,r.infoFor3D,t)}function d(t,i){let a=u.from(t);if(a.sourceSpatialReference=a.sourceSpatialReference||i?.sourceSpatialReference,(i.gdbVersion||i.dynamicDataSource)&&(a=a===t?a.clone():a,a.gdbVersion=t.gdbVersion||i.gdbVersion,a.dynamicDataSource=t.dynamicDataSource?n.from(t.dynamicDataSource):i.dynamicDataSource),r(i.infoFor3D)&&y(t,i?.infoFor3D)){a=a===t?a.clone():a,a.formatOf3DObjects=null;for(const o of i.infoFor3D.queryFormats){if("3D_glb"===o.id){a.formatOf3DObjects=o.id;break}"3D_gltf"!==o.id||a.formatOf3DObjects||(a.formatOf3DObjects=o.id)}if(!a.formatOf3DObjects)throw new o("query:unsupported-3d-query-formats","Could not find any supported 3D object query format. Only supported formats are 3D_glb and 3D_gltf");if(e(a.outFields)||!a.outFields.includes("*")){a=a===t?a.clone():a,e(a.outFields)&&(a.outFields=[]);const{originX:o,originY:r,originZ:n,translationX:s,translationY:f,translationZ:u,scaleX:c,scaleY:m,scaleZ:l,rotationX:p,rotationY:d,rotationZ:y,rotationDeg:D}=i.infoFor3D.transformFieldRoles;a.outFields.push(o,r,n,s,f,u,c,m,l,p,d,y,D)}}return a}function y(o,t){return r(t)&&o.returnGeometry&&"xyFootprint"!==o.multipatchOption&&!o.outStatistics}export{c as executeQuery,m as executeRawQuery,l as normalizeFields};