    ﻿import { Zondy } from '../../common/Base';
    import { extend } from '../../common/Util';
    import { QueryFeatureStruct } from './QueryFeatureStruct';
    import { QueryFeatureRule } from './QueryFeatureRule';

    /**
     * @author 基础平台/研究院 陈琪
     * @class module:要素服务.QueryParameterBase
     * @classdesc  矢量地图参数查询基类
     * @description Zondy.Service.QueryParameterBase
     * @param option - {Object} 属性键值对。
     * @param {Zondy.Object.Tangram} [option.geometry=null] 用于查询的几何描述
     * @param {String} [option.where=null] 条件查询的SQL语句,如果为空，则表示为单一的几何查询；如果取值，表示为几何和条件混合查询
     * @param {Zondy.Service.QueryFeatureRule} [option.rule=null] 几何查询的规则
     * @param {String} [option.objectIds=null] 需要查询的要素OID号，多个间用‘，’分隔；如果此参数有值，查询将默认转化为使用要素ID查询，而忽略条件查询
     * @param {Number} [option.pageIndex=0] 分页号
     * @param {Number} [option.recordNumber=20] 每页记录数
     * @param {String} [option.resultFormat=json]  查询结果的序列化形式(json（默认值）|xml|kml|gml|georss，对于xml，kml，gml或者georss格式的类xml类型将以text文本返回，如需要可调用$.parseXML(text)得到其xml包装)
     * @param {Zondy.Service.QueryFeatureStruct} [option.struct=new QueryFeatureStruct()] 指定查询返回结果所包含的要素信息
     * @param {String} [option.orderField=null] 指定查询返回结果的排序字段
     * @param {Boolean} [option.rtnLabel=false] 是否计算Label点
     * @param {String} [option.fields=""] 指定结果字段
     * @param {Number} [option.coordPrecision=2] 坐标点的精度
     * @param {Boolean} [option.isAsc=false] 是否升序排列，与orderField配合使用
     * @param {String} [option.cursorType=“forward”] 游标类型 forward为向前光标 其他为向前向后
     * @param {string} [option.proj] 投影参考系，多个图层用半角逗号分隔
     * @param {string} [option.guid=“__readonly_user__”] 唯一id，可缺省
     */

    class QueryParameterBase {
        constructor(option) {
            var options = option ? option : {};
            extend(this, options);

            this.geometry = options.geometry !== undefined ? options.geometry : null;

            this.where = options.where !== undefined ? options.where : null;

            this.rule = options.rule !== undefined ? options.rule : new QueryFeatureRule();

            this.objectIds = options.objectIds !== undefined ? options.objectIds : null;

            this.pageIndex = options.pageIndex !== undefined ? options.pageIndex : 0;

            this.recordNumber = options.recordNumber !== undefined ? options.recordNumber : 20;

            this.resultFormat = options.resultFormat !== undefined ? options.resultFormat : 'json';

            this.struct = options.struct !== undefined ? options.struct : new QueryFeatureStruct();

            this.orderField = options.orderField !== undefined ? options.orderField : null;

            this.rtnLabel = options.rtnLabel !== undefined ? options.rtnLabel : false;

            this.fields = options.fields || '';

            this.coordPrecision = options.coordPrecision || options.coordPrecision === 0 ? options.coordPrecision : 2;

            this.isAsc = options.isAsc !== undefined ? options.isAsc : false;

            this.cursorType = options.cursorType !== undefined ? options.cursorType : 'forward';

            this.proj = options.proj || null;

            this.guid = options.guid || '__readonly_user__';
        }
    }

    export { QueryParameterBase };
    Zondy.Service.QueryParameterBase = QueryParameterBase;