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;