    ﻿import {
        Zondy
    } from '../../common/Base';
    import {
        GeometryAnalysisBase
    } from "./GeometryAnalysisBase";
    import {
        Point2D
    } from "../../common/Point2D";
    import {
        IgsServiceBase
    } from "../../baseserver/IServiceBase";

    /**
     * 光滑线
     * @class  module:几何分析服务.Smooth
     * @classdesc 光滑线
     * @description Zondy.Service.Smooth 插值方式:可取值0、1、2、3
     * @extends Zondy.Service.GeometryAnalysisBase
     * @param {Object} option 属性键值对
     * @param {Number} [option.type = 0] 0为二次样条、1为三次样条、2为三次Beizer样条、3为三次B样条
     * @param {Number} [option.step = 1] 步长，插值时的间隔步长
     * @example
     //设置原始线坐标数组
     var dataObject = [
     {
         "x": 64.3026761440958,
         "y": -13.3927768273516
     }, {
                            "x": 81.3250355929193,
                            "y": -8.44081771496663
                        }, {
                            "x": 72.9827194,
                            "y": 7.0129852
                        }, {
                            "x": 93.7049333738818,
                            "y": -2.86986371353349
                        }, {
                            "x": 90,
                            "y": 13.6363636363636
                        }, {
                            "x": 105.213348388672,
                            "y": 8.70024061203003
                        }
     ];
     //创建光滑线分析服务
     var smooth = new Zondy.Service.Smooth({
                            //插值方式,可取值0、1、2、3，0为二次样条、1为三次样条、2为三次Beizer样条、3为三次B样条
                            type: 2,
                            //插值时的间隔步长
                            step: 1,
                            //IGServer服务器地址
                            ip: "develop.smaryun.com",
                            //IGServer服务器端口
                            port: "6163"
                        }
     );
     //执行光滑线功能服务，并返回结果信息，onSuccess为回调函数
     smooth.execute(dataObject, function (res) {
                        console.log(res);
                    }, function (error) {
                        console.log(error);
                    });
     */
    class Smooth extends GeometryAnalysisBase {
        constructor(option) {
            var options = option ? option : {};
            super(options);

            /**
             * @private
             * @member Zondy.Service.Smooth.prototype.type
             * @type {Zondy.Service.CProjectParam}
             * @description 插值方式。可取值0、1、2、3 0为二次样条、1为三次样条、2为三次Beizer样条、3为三次B样条
             * @default 0
             */
            this.type = options.type !== undefined ? options.type : 0;

            /**
             * @private
             * @member Zondy.Service.Smooth.prototype.step
             * @type {Zondy.Service.CProjectParam}
             * @description 步长，插值时的间隔步长
             * @default 1
             */
            this.step = options.step !== undefined ? options.step : 1;
        }

        /**
         * @function Zondy.Service.Smooth.prototype.setType
         * @description 设置插值方式,可取值0、1、2、3
         * @param {Number} type
         */
        setType(type) {
            this.type = type;
        }

        /**
         * @function Zondy.Service.Smooth.prototype.setStep
         * @description 设置步长，插值时的间隔步长
         * @param {Number} step
         */
        setStep(step) {
            this.step = step;
        }

        /**
         * @function Zondy.Service.Smooth.prototype.execute
         * @description 执行光滑线调用
         * @param {Array} dots Array<{@link Zondy.Object.Point2D}>
         * @param {callback} onSuccess 执行成功后的回调函数
         * @param {callback} onError 执行失败后的回调函数
         */
        execute(dots, onSuccess, onError) {
            if (this.type == 2) {
                if (dots.length < 4) {
                    alert("当前选中的为三次Beizer样条，最少需四个点");
                    return;
                }
            } else {
                if (dots.length < 3) {
                    alert("当前选中的类型最少需三个点");
                    return;
                }
            }
            this.partUrl = "geomservice/smooth?f=json&type=" + this.type + "&step=" + this.step;
            var url = this.getFullUrl();
            var me = this;
            var service = new IgsServiceBase(url, {
                eventListeners: {
                    scope: me,
                    processCompleted: onSuccess,
                    processFailed: onError
                }
            });
            service.processAsync({
                method: 'POST',
                data: JSON.stringify(dots),
                headers: {
                    'Content-Type': 'text/plain;charset=UTF-8'
                }
            });
        }
    }
    export {
        Smooth
    };
    Zondy.Service.Smooth = Smooth;