    ﻿import {
        Zondy
    } from './Base';
    import {
        extend
    } from "./Util";
    import {
        CAttStruct
    } from "./CAttStruct";
    import {
        Feature
    } from "./Feature";

    /**
     * 要素集合信息对象
     * @class Zondy.Object.FeatureSet
     * @classdesc 要素集合信息对象
     * @param {Object} option 属性键值对
     * @param {Array} [option.TotalCount = null] 要素总数
     * @param {Array} [option.AttStruct = null] 属性结构 Array<{@link Zondy.Object.CAttStruct}>
     * @param {Array} [option.SFEleArray = new Array()] 要素数组 Array<{@link Zondy.Object.Feature}>
     */
    var FeatureSet = function (option) {
        var options = (option !== undefined) ? option : {};
        extend(this, options);

        /**
         * @property TotalCount
         * @description 一次查询的总要素个数，仅在做要素查询时有意义
         * @type {Number}
         * @readonly
         */
        this.TotalCount = (options.TotalCount !== undefined && options.TotalCount !== null) ? options.TotalCount : 0;

        /**
         * @member Zondy.Object.FeatureSet.prototype.AttStruct
         * @type {Array}
         * @description 属性结构 Array<{@link Zondy.Object.CAttStruct}>
         * @default null
         */
        this.AttStruct = (options.AttStruct !== undefined && options.AttStruct !== null) ? options.AttStruct : null;

        /**
         * @member Zondy.Object.FeatureSet.prototype.SFEleArray
         * @type {Array}
         * @description 要素数组 Array<{@link Zondy.Object.Feature }>
         * @default new Array()
         */
        this.SFEleArray = (options.SFEleArray !== undefined && options.SFEleArray !== null) ? options.SFEleArray : new Array();
    };

    /**
     * @function Zondy.Object.FeatureSet.prototype.clear
     * @description 清空要素集合
     */
    FeatureSet.prototype.clear = function () {
        this.AttStruct = null;
        this.SFEleArray = new Array();
    };

    /**
     * @function Zondy.Object.FeatureSet.prototype.addFeature
     * @description 添加一组或者一个要素
     * @param {Array | Zondy.Object.Feature | Object} 一组要素，或者一个要素 Object代表Feature的属性键值对
     */
    FeatureSet.prototype.addFeature = function (features) {
        if (features instanceof Array) {
            this.SFEleArray.concat(features);
        } else {
            this.SFEleArray.push(features);
        }
    };

    /**
     * @function Zondy.Object.FeatureSet.prototype.getFeaturesLength
     * @description 获取要素集要素的记录条数
     * @returns {Number} 要素集要素的记录条数
     */
    FeatureSet.prototype.getFeaturesLength = function () {
        if (this.SFEleArray instanceof Array) {
            return this.SFEleArray.length;
        } else {
            return 0;
        }
    };

    /**
     * @function Zondy.Object.FeatureSet.prototype.getFeatureByIndex
     * @description 获取指定要素对象
     * @param {Number} i 对象索引下标
     * @returns {Zondy.Object.Feature} 要素对象
     */
    FeatureSet.prototype.getFeatureByIndex = function (i) {
        if (i >= this.getFeaturesLength()) {
            return null;
        } else {
            var feature = this.SFEleArray[i];
            if (feature instanceof Feature) {
                return feature;
            } else {
                return new Feature(this.SFEleArray[i]);
            }
        }
    };

    /**
     * @function Zondy.Object.FeatureSet.prototype.getAttType
     * @description 获取某属性字段的类型
     * @param {String | Number} attKey 属性字段关键字，可以是{String}字段名，可以是序号{Interger}
     * @returns {String} 字段类型
     */
    FeatureSet.prototype.getAttType = function (attKey) {
        var index;
        if (this.AttStruct == null) {
            return null;
        }
        if (typeof (attKey) == 'number') {
            index = attKey;
        } else {
            index = this.getAttIndexByAttName(attKey);
        }
        if (index == null) {
            return null;
        } else {
            return this.AttStruct.FldType[index];
        }
    };

    /**
     * @function Zondy.Object.FeatureSet.prototype.getAttIndexByAttName
     * @description 通过属性的名称获取属性的序号
     * @param {String} name 属性名
     * @returns {Number} 属性序号
     */
    FeatureSet.prototype.getAttIndexByAttName = function (name) {
        if (this.AttStruct == null) {
            return null;
        }
        if (this.AttStruct.FldName == null) {
            return null;
        }
        var length = this.AttStruct.FldName.length;
        for (var i = 0; i < length; i++) {
            if (this.AttStruct.FldName[i] == name) {
                return i;
            }
        }
        return null;
    };

    /**
     * @function Zondy.Object.FeatureSet.prototype.getAttNameByIndex
     * @description 通过属性的序号获取属性名称
     * @param {Number} index 属性序号
     * @returns {String} 属性名称
     */
    FeatureSet.prototype.getAttNameByIndex = function (index) {
        if (this.AttStruct == null) {
            return null;
        }
        if (this.AttStruct.FldName == null) {
            return null;
        }
        if (this.AttStruct.FldName.length <= index) {
            return null;
        }
        return this.AttStruct.FldName[index];
    };
    export {
        FeatureSet
    };
    Zondy.Object.FeatureSet = FeatureSet;