    import Zondy from '../Zondy'
    import { defaultValue } from '../../util'
    import { SymbolType } from '../enum'
    import LineSymbol from './LineSymbol'
    import LineSymbolMarker from './support/LineSymbolMarker'

    /**
     * 简单线符号，支持线几何对象，参考示例：<a href='#new-SimpleLineSymbol'>[线符号样式]</a>
     * <br><br>[ES5引入方式]：<br/>
     * Zondy.Symbol.SimpleLineSymbol() <br/>
     * [ES6引入方式]：<br/>
     * import { SimpleLineSymbol } from "@mapgis/webclient-common" <br/>
     * <br/>
     * @class SimpleLineSymbol
     * @moduleEX BaseModule
     * @extends LineSymbol
     * @param {Object} options 线符号样式
     * @param {Number} [options.width = 1] 线符号宽度，默认为1
     * @param {Color|String} [options.color = new Color(255, 0, 0, 1)] 线符号颜色，默认为红色
     * @param {String} [options.cap = 'round'] 线的起点和终点样式,可选参数 "butt"|"round"|"square"
     * butt：线的首尾为直角，round：线的首尾为圆形，square：线的首尾会超出一部分，且为矩形
     * @param {String} [options.join = 'round'] 线的拐角样式，可选参数 "miter"|"round"|"bevel"，
     * miter：线的拐角为直角，round：线的拐角为圆角，bevel：线的拐角为斜角
     * @param {Number} [options.miterLimit = 2] 斜接的宽度与线宽的最大允许比率,防止转角过小问题
     * @param {String} [options.style = 'solid'] 线样式,默认'solid',可选"dash"|"dash-dot"|"dot"|"long-dash"|"long-dash-dot"|"long-dash-dot-dot"|"none"|"short-dash"|"short-dash-dot"|"short-dash-dot-dot"|"short-dot"|"solid"
     * @param {LineSymbolMarker} [options.marker] 线端点样式
     *
     * @summary <h5>支持如下方法：</h5>
     * [1、克隆并返回新的符号对象]{@link Symbol#clone} <br/>
     * [2、导出一个JSON对像]{@link Symbol#toJSON} <br/>
     * <a href='#fromJSON'>[3、通过json构造并返回一个新的SimpleLineSymbol对象]</a>
     *
     * @example <caption><h7 id='new-SimpleLineSymbol'>创建线符号样式对象</h7></caption>
     * // ES5引入方式
     * const { SimpleLineSymbol } = Zondy.Symbol
     * const { Color } = Zondy
     * // ES6引入方式
     * import { SimpleLineSymbol, Color } from "@mapgis/webclient-common"
     * const simpleLineSymbol = new SimpleLineSymbol({
     *   // 线符号颜色
     *   color: new Color(255, 0, 0, 1),
     *   // 线符号宽度
     *   width: 2,
     *   // 线首尾角样式
     *   cap: "round",
     *   // 线接角样式
     *   join: "round",
     *   // 斜接的宽度与线宽的最大允许比率
     *   miterLimit: 2,
     *   // 线样式
     *   style: "solid"
     * });
     */

    class SimpleLineSymbol extends LineSymbol {
      constructor(options) {
        super(options)

        options = defaultValue(options, {})

        /**
         * 符号类型
         * @member {String} SimpleLineSymbol.prototype.type
         */
        this.type = SymbolType.simpleLine
        /**
         * 首尾角样式
         * @member {String} SimpleLineSymbol.prototype.cap
         */
        this.cap = defaultValue(options.cap, 'round')
        /**
         * 接角样式
         * @member {String} SimpleLineSymbol.prototype.join
         */
        this.join = defaultValue(options.join, 'round')
        /**
         * 斜接的宽度与线宽的最大允许比率
         * @member {Number} SimpleLineSymbol.prototype.miterLimit
         */
        this.miterLimit = defaultValue(options.miterLimit, 2)
        /**
         * 线样式
         * @member {String} SimpleLineSymbol.prototype.style
         */
        this.style = defaultValue(options.style, 'solid')
        /**
         * 线端点样式
         * @member {LineSymbolMarker} SimpleLineSymbol.prototype.marker
         */
        const markerObject = defaultValue(options.marker, null)
        if (markerObject) {
          markerObject.color = defaultValue(markerObject.color, this.color.clone())
          this.marker = LineSymbolMarker.fromJSON(markerObject)
        } else {
          this.marker = null
        }
      }

      /**
       * 通过json构造并返回一个新的SimpleLineSymbol对象<a id='fromJSON'></a>
       * @param {Object} json 符号的实例化JSON
       * @return {SimpleLineSymbol} 新的SimpleLineSymbol对象
       * @example <caption><h7>通过json构造并返回一个新的SimpleLineSymbol对象</h7></caption>
       */
      static fromJSON(json) {
        json = defaultValue(json, {})
        return new SimpleLineSymbol(json)
      }

      /**
       * 克隆并返回新的符号对象
       * @return {SimpleLineSymbol} 克隆后的新符号对象
       */
      clone() {
        return new SimpleLineSymbol(this.toJSON())
      }

      /**
       * 导出为JSON对象
       * @return {Object} JSON对像
       */
      toJSON() {
        const json = super.toJSON()
        json.cap = this.cap
        json.join = this.join
        json.miterLimit = this.miterLimit
        json.style = this.style
        json.marker = this.marker ? this.marker.toJSON() : null
        return json
      }
    }

    Zondy.Symbol.SimpleLineSymbol = SimpleLineSymbol
    export default SimpleLineSymbol