    import Qs from 'qs';

    import { Zondy } from '../../common/Base';
    import { CloudDiskService } from '../ServiceBase';

    const AddPath = '';
    const CatalogPath = '/catalog';
    const CatalogTypePath = '/catalog/{type}?';
    const ExecutePath = '/execute/{type}/{modelID}?';
    const NodePath = '/node';
    const NodeIdPath = '/node/{id}?';
    const NodeRootPath = '/node/root';
    const NodesPath = '/nodes';
    const NodesIdPath = '/nodes/{nodeId}?';

    /**
     * @class module:CloudDisk.CalculateModelService
     * @description DataStore的云盘数据转换服务
     * @see 该方法强依赖datastore
     * @author 基础平台-潘卓然
     * @see http://192.168.199.53:9011/clouddisk/rest/swagger-ui.html
     * @example
     * let service = new CalculateModelService({ domain: "http://192.168.199.53:9011"});
     * service.setHeaders({authorization: 'pk.xxxxxx'});
     * service.add({nodeId: 100}, (res) => {}, (error) => {});
     * service.catalog({nodeId: 100}, (res) => {}, (error) => {});
     */
    export class CalculateModelService extends CloudDiskService {
        constructor(options) {
            super(options);
            /**
             * @member module:CloudDisk.CalculateModelService.prototype.serviceUrl
             * @description 服务地址
             */
            this.serviceUrl = '/clouddisk/rest/CalculateModel';
        }

        /**
         * @function module:CloudDisk.CalculateModelService.prototype.add
         * @description 空间数据元数据
         * @param  {Object} options 请求参数
         * @param  {Number} options.nodeId 节点id
         * @param  {Object} options.model  目地目录
         * @param  {Number} options.model.id
         * @param  {String} options.model.name
         * @param  {String} options.model.version
         * @param  {String} options.model.desp
         * @param  {String} options.model.img
         * @param  {String} options.model.modelType
         * @param  {String} options.model.modelId
         * @param  {Function} onSuccess 成功回调
         * @param  {Function} onError 失败回调
         * @example http://192.168.199.53:9011/clouddisk/rest/CalculateModel
         * {
                "nodeId": 3131,
                "id": 0,
                "name": "string",
                "version": "string",
                "desp": "string",
                "img": "string",
                "modelType": "string",
                "modelId": "string"
            }
         */
        add(options, onSuccess, onError) {
            let { serviceUrl } = this;
            let baseurl = this.getBaseUrl();
            let url = `${baseurl}${serviceUrl}${AddPath}?nodeId=${options.nodeId}`;
            delete options.nodeId;
            this.post(url, options, onSuccess, onError);
        }

        /**
         * @function module:CloudDisk.CalculateModelService.prototype.catalog
         * @description 空间数据元数据
         * @param  {Object} options 请求参数
         * @param  {Number} options.nodeId 节点id
         * @param  {String} options.keyword  检索关键词
         * @param  {Function} onSuccess 成功回调
         * @param  {Function} onError 失败回调
         * @example http://192.168.199.53:9011/clouddisk/rest/CalculateModel/catalog
         */
        catalog(options, onSuccess, onError) {
            let { serviceUrl } = this;
            serviceUrl += CatalogPath;
            let url = this.getFullUrl(serviceUrl, options);
            this.get(url, onSuccess, onError);
        }

        /**
         * @function module:CloudDisk.CalculateModelService.prototype.catalogtype
         * @description 空间数据元数据
         * @param  {Object} options 请求参数
         * @param  {String} options.type 模型类型eg: igs 、bigdata
         * @param  {String} options.modelID  模型id
         * @param  {String} options.keyWords  模型功能类型
         * @param  {String} options.keys  模型检索关键词
         * @param  {Function} onSuccess 成功回调
         * @param  {Function} onError 失败回调
         * @example http://192.168.199.53:9011/clouddisk/rest/CalculateModel/catalog/{type}
         */
        catalogtype(options, onSuccess, onError) {
            const { type } = options;
            let { serviceUrl } = this;
            let baseurl = this.getBaseUrl();
            let url = `${baseurl}${serviceUrl}${CatalogTypePath}`;
            url = url.replace('{type}', type);
            delete options.type;
            url = url + Qs.stringify(options);
            this.get(url, onSuccess, onError);
        }

        /**
         * @function module:CloudDisk.CalculateModelService.prototype.execute
         * @description 空间数据元数据
         * @param  {Object} options 请求参数
         * @param  {Object} options.type  模型类型
         * @param  {Object} options.modelID 模型id
         * @param  {Function} onSuccess 成功回调
         * @param  {Function} onError 失败回调
         * @example http://192.168.199.53:9011/clouddisk/rest/CalculateModel/execute/{type}/{modelID}
         */
        execute(options, onSuccess, onError) {
            const { serviceUrl } = this;
            const { type, modelID } = options;
            let baseurl = this.getBaseUrl();

            let url = `${baseurl}${serviceUrl}${ExecutePath}`;
            url = url.replace('{type}', type);
            url = url.replace('{modelID}', modelID);

            this.post(url, undefined, onSuccess, onError);
        }

        /**
         * @function module:CloudDisk.CalculateModelService.prototype.node
         * @description 空间数据元数据 Parameter-Content-Type application/json
         * @param  {Object} treeNode  请求参数
         * @param  {Function} onSuccess 成功回调
         * @param  {Function} onError 失败回调
         * @example http://192.168.199.53:9011/clouddisk/rest/CalculateModel/node
         * {
                "id": 0,
                "name": "string",
                "pid": 0,
                "type": 0,
                "desp": "string",
                "nodeSelected": true,
                "nodeExpand": true,
                "sortId": 0,
                "nodeIco": "string",
                "year": "string",
                "ownerType": 0,
                "ownerId": "string",
                "applicationId": 0,
                "children": [
                    null
                ]
            }
         */
        node(options, onSuccess, onError) {
            const { serviceUrl } = this;
            let baseurl = this.getBaseUrl();
            let url = `${baseurl}${serviceUrl}${NodePath}`;
            this.post(url, options, onSuccess, onError);
        }

        /**
         * @function module:CloudDisk.CalculateModelService.prototype.nodeid
         * @description 空间数据元数据
         * @param  {Object} options 请求参数
         * @param  {String} options.id 节点id
         * @param  {Function} onSuccess 成功回调
         * @param  {Function} onError 失败回调
         * @example http://192.168.199.53:9011/clouddisk/rest/CalculateModel/node/{id}
         */
        nodeid(options, onSuccess, onError) {
            const { id } = options;
            let { serviceUrl } = this;
            let url = `${baseurl}${serviceUrl}${NodeIdPath}`;
            url = url.replace('{id}', id);
            this.get(url, onSuccess, onError);
        }

        /**
         * @function module:CloudDisk.CalculateModelService.prototype.noderoot
         * @description 空间数据元数据
         * @param  {Function} onSuccess 成功回调
         * @param  {Function} onError 失败回调
         * @example http://192.168.199.53:9011/clouddisk/rest/CalculateModel/node/root
         */
        noderoot(options, onSuccess, onError) {
            options = {};
            let { serviceUrl } = this;
            serviceUrl += NodeRootPath;
            let url = this.getFullUrl(serviceUrl, options);
            this.get(url, onSuccess, onError);
        }

        /**
         * @function module:CloudDisk.CalculateModelService.prototype.nodes
         * @description 空间数据元数据
         * @param  {Function} onSuccess 成功回调
         * @param  {Function} onError 失败回调
         * @example http://192.168.199.53:9011/clouddisk/rest/CalculateModel/nodes
         */
        nodes(options, onSuccess, onError) {
            options = {};
            let { serviceUrl } = this;
            serviceUrl += NodesPath;
            let url = this.getFullUrl(serviceUrl, options);
            this.get(url, onSuccess, onError);
        }

        /**
         * @function module:CloudDisk.CalculateModelService.prototype.nodesid
         * @description 空间数据元数据
         * @param  {Object} options 请求参数
         * @param  {String} options.nodeId 节点id
         * @param  {Boolean} [options.subLevel = false] 是否包含子级节点
         * @param  {Function} onSuccess 成功回调
         * @param  {Function} onError 失败回调
         * @example http://192.168.199.53:9011/clouddisk/rest/CalculateModel/nodes/{nodeId}?subLevel=false
         */
        nodesid(options, onSuccess, onError) {
            const { nodeId } = options;
            let { serviceUrl } = this;
            let url = `${baseurl}${serviceUrl}${NodesIdPath}`;
            url = url.replace('{nodeId}', nodeId);
            delete options.nodeId;
            url = url + Qs.stringify(options);
            this.get(url, onSuccess, onError);
        }
    }

    export default CalculateModelService;
    Zondy.CloudDisk.Model.CalculateModelService = CalculateModelService;