import { List } from "../dataType/List";
import { Geometry } from "../models/Geometry";
import { Guid } from "@gvol-org/geovis-brain-core";
/**
 * @class Map.GeometryLayer
 * @since ui.Map
 */
export class GeometryLayer {
    _geometries: any=[];
    name: string;
    color: string;
    shown: boolean=true;
    locked: boolean;
    id:string;
    geometryType:string="Geometry";//Geometry、Feature、FeatureCollection三种类型
    properties:object={};
    /**
    * @hideconstructor
    * 通过地图工具绘制的矢量图形数据图层
   * @param {List<Geometry>} geometries 矢量图形数据列表
   * @param {string} name    图层名称
   * @param {string} color   图层颜色
   * @param {boolean} shown  是否显示图层,默认为true
   * @param {boolean} locked 是否锁定图层编辑,默认为false
   * @return ui.Map.GeometryLayer
   */
    constructor(geometries?: List<Geometry>, name?: string, color?: string, shown?: boolean, locked?: boolean) {
        if (!(this instanceof GeometryLayer)) {
            return new GeometryLayer(geometries, name, color, shown, locked);
        }
        if (geometries) {
            this._geometries=geometries;
        }
        this.name=name;
        this.color=color;
        this.shown=shown;
        this.locked=locked;
        this.id=Guid.newGuid();
    }

   /**
   * Geometry转为GeometryLayer
   * @return ui.Map.GeometryLayer
   */
    fromGeometry(geometry: Geometry) {
        //Geometry转为GeometryLayer
        return this;
    }

     /**
     * 返回矢量图形列表
     * @return List<Geometry>
     */
    geometries() {
        return this._geometries;
    }



   /**
   *  返回图层颜色
   *  @return string
   */
    getColor() {
        return this.color;
    }

   /**
   *  返回图层是否锁定
   *  @return boolean
   */
    getLocked() {
        return this.locked;
    }

    /**
     * 返回图层名称
     * @returns string
     */
    getName() {
        return this.name;
    }

    /**
     *  返回图层是否显示
     * @returns boolean
     */
    getShown() {
        return this.shown;
    }

 
    /**
     * 设置图层颜色
     * @param {string} color 颜色
     * @return  ui.Map.GeometryLayer
     */
    setColor(color: string) {
        this.color = color;
        return this;
    }


    /**
     * 设置图层是否锁定
     * @param {boolean} locked 是否锁定
     * @returns ui.Map.GeometryLayer
     */
    setLocked(locked: boolean) {
        this.locked = locked;
        return this;
    }

    /**
     * 设置图层名称
     * @param {string} name 图层名称
     * @returns ui.Map.GeometryLayer
     */
    setName(name: string) {
        this.name = name;
        return this;
    }

    /**
     * 设置图层是否显示
     * @param {boolean} shown 是否显示
     * @returns ui.Map.GeometryLayer
     */
    setShown(shown: boolean) {
        this.shown = shown;
        return this;
    }

    /**
     * 返回Geometry
     * @returns Geometry
     */
    toGeometry() {
        //返回Geometry
        return new Geometry();
    }
}