import ZModulesCDP from '../types';
/**
 * 可视化数据集
 */
declare namespace CdpFlowTypes {
    /**
     * 节点类型
     */
    enum Shape {
        /**
         * 数据表
         */
        table = "table",
        /**
         * 连接
         */
        join = "join",
        /**
         * 表合并
         */
        merge = "merge",
        /**
         * 行转列
         */
        row2Column = "row2Column",
        /**
         * 列转行
         */
        column2Row = "column2Row",
        /**
         * 数据拆分
         */
        split = "split",
        /**
         * 聚合
         */
        group = "group",
        /**
         * 字段设置
         */
        columnSetting = "columnSetting",
        /**
         * 输出
         */
        output = "output",
        /**
         * 连接线
         */
        line = "line",
        /**
         * 替换缺省值
         */
        replaceNull = "replaceNull",
        /**
         * 数据过滤(去重)
         */
        distinct = "distinct",
        /**
         * 合并列
         */
        mergeColumn = "mergeColumn",
        /**
         * 拆分列
         */
        splitColumn = "splitColumn",
        /**
         * 计算列
         */
        computeColumn = "computeColumn",
        /**
         * sql脚本
         */
        sqlShell = "sqlShell",
        /**
         * 数据清洗
         */
        dataClean = "dataClean"
    }
    /**
     * 流程节点
     */
    interface Node {
        /**
         * 节点id
         */
        id: string;
        /**
         * 节点类型
         */
        shape: Shape;
        /**
         * 节点展示名称
         */
        label: string;
        /**
         * 节点绑定业务数据
         */
        data: NodeData.Table | NodeData.Join | NodeData.ColumnSetting | NodeData.Group | NodeData.Merge | NodeData.Output;
        /**
         * 画布坐标
         */
        position: {
            x: number;
            y: number;
        };
        /**
         * 节点尺寸
         */
        size: {
            width: number;
            height: number;
        };
    }
    /**
     * 连接线
     */
    interface Line {
        /**
         * 连接线id
         */
        id: string;
        /**
         * 节点类型
         */
        shape: Shape.line;
        /**
         * 来源节点关系
         */
        source: {
            /**
             * 来源节点id
             */
            cell: string;
            /**
             * 对应连接桩位置
             */
            port: string;
        };
        /**
         * 目标节点
         */
        target: {
            /**
             * 目标节点id
             */
            cell: string;
            /**
             * 对应连接桩位置
             */
            port: string;
        };
    }
    /**
     * 可视化数据集任务数据
     */
    interface FlowData {
        /**
         * 所属应用id
         */
        projectId: number;
        /**
         * 流程图节点
         */
        nodeList: Node[];
        /**
         * 连接线列表
         */
        lineList: Line[];
    }
    /**
     * 任务优先级
     */
    enum JobLevel {
        lower = "lower",
        middle = "middle",
        high = "high"
    }
    interface JobData {
        /**
         * 任务名称
         */
        name?: string;
        /**
         * 任务描述
         */
        desc?: string;
        /**
         * 任务优先级
         */
        level?: JobLevel;
        /**
         * 更新设置
         */
        updateSetting?: ZModulesCDP.DataSet.CreateParam['updateSetting'];
        /**
         * 更新方式
         */
        syncType?: ZModulesCDP.DataSet.CreateParam['syncType'];
        /**
         * 日期格式
         */
        dateFormat?: string;
        /**
         * 增量更新依据字段
         * 当updateType为增量更新时必传
         */
        updateBy?: ZModulesCDP.DataSet.CreateParam['updateBy'];
        /**
         * 更新时间
         */
        lastUpdateTime?: string;
        /**
         * 创建时间
         */
        createTime?: string;
        /**
         * 更新次数
         */
        updateTimes?: number;
        /**
         * 创建人
         */
        createUser?: string;
    }
    /**
     * 节点数据
     */
    namespace NodeData {
        interface Base {
            icon?: string;
            label?: string;
            status?: 'success' | 'failed';
            code?: number;
            /**
             * 执行code，用于预览数据和查看日志的凭证
             */
            runCode?: string;
        }
        /**
         * 数据表信息
         */
        interface Table extends Base {
            shape: Shape.table;
            /**
             * 数据集id
             */
            datasetId: number;
            /**
             * 表名称
             */
            tableName: string;
            /**
             * 选中字段列表
             */
            columnList?: ZModulesCDP.DataSet.Column[];
            /**
             * 数据筛选规则列表
             */
            columnRules?: ZModulesCDP.DataSet.ColumnRule[];
        }
        /**
         * 连接
         */
        interface Join extends Base {
            shape: Shape.join;
            /**
             * 连接类型
             */
            type: 'inner' | 'right' | 'left' | 'all';
            /**
             * 连接条件
             * [[table1.id,table2.id], [table1.name,table2.name]]
             */
            joinOn: [ZModulesCDP.DataSet.Column, ZModulesCDP.DataSet.Column][];
            /**
             * 合并结果
             */
            resultTable: {
                /**
                 * 主表字段
                 */
                table1: ModifyColumn[];
                /**
                 * 从表字段
                 */
                table2: ModifyColumn[];
            };
        }
        /**
         * 字段设置
         */
        interface ColumnSetting extends Base {
            shape: Shape.columnSetting;
            /**
             * 字段列表
             */
            columns: {
                /**
                 * 原始字段
                 */
                origin: ZModulesCDP.DataSet.Column;
                /**
                 * 修改后的类型
                 */
                modifyType?: ZModulesCDP.DataSet.Column['type'];
                /**
                 * 修改后的名称
                 */
                modifyName?: string;
            }[];
        }
        /**
         * 聚合
         */
        interface Group extends Base {
            shape: Shape.group;
            /**
             * 聚合字段列表
             */
            group: {
                /**
                 * 聚合字段
                 */
                column: ZModulesCDP.DataSet.Column;
                /**
                 * 聚合函数类型
                 */
                func: 'max' | 'min' | 'sum' | 'avg' | 'count';
            }[];
            /**
             * 分组字段列表
             */
            groupBy: ZModulesCDP.DataSet.Column[];
        }
        /**
         * 合并
         */
        interface Merge extends Base {
            shape?: Shape.merge;
            groupInfoList: {
                /**
                 * 表唯一标记code
                 */
                code: string;
                /**
                 * 选中字段列表
                 */
                columnList?: ZModulesCDP.DataSet.Column[];
            }[];
        }
        /**
         * 输出
         */
        interface Output extends Base {
            shape?: Shape.output;
            /**
             * 数据集id（选择已有数据集时有）
             */
            datasetId?: number;
            /**
             * 表名称
             */
            tableName?: string;
            /**
             * 数据集名称
             */
            datasetName?: string;
            /**
             * 数据集描述
             */
            datasetDesc?: string;
        }
        /**
         * 行转列
         */
        interface Row2Column extends Base {
            shape: Shape.row2Column;
            /**
             * 目标字段
             */
            targetColumn: ZModulesCDP.DataSet.Column;
            /**
             * 值填充字段
             */
            fillingColumn: ZModulesCDP.DataSet.Column;
            /**
             * 新增字段
             */
            addList: string[];
            /**
             * 勾选字段列表
             */
            columnList: ZModulesCDP.DataSet.Column[];
        }
        /**
         * 列转行
         */
        interface Column2Row extends Base {
            shape: Shape.column2Row;
            /**
             * 目标字段列表
             */
            targetColumns: ZModulesCDP.DataSet.Column[];
            /**
             * 字段名称
             */
            columnName: string;
            /**
             * 值字段名称
             */
            columnValue: string;
        }
        /**
         * 数据拆分
         */
        interface Split extends Base {
            shape: Shape.split;
            /**
             * 拆分比例
             */
            percent: number;
            /**
             * 拆分依赖字段
             */
            splitColumn: ZModulesCDP.DataSet.Column;
        }
        enum ReplaceNullRule {
            /**
             * 0
             */
            zero = "0",
            /**
             * 最小值
             */
            min = "min",
            /**
             * 最大值
             */
            max = "max",
            /**
             * 中位数
             */
            median = "median",
            /**
             * 众数
             */
            mode = "mode",
            /**
             * 平均数
             */
            avg = "avg"
        }
        /**
         * 替换缺省值
         */
        interface ReplaceNull extends Base {
            shape: Shape.replaceNull;
            /**
             * 待替换字段
             */
            columns: ZModulesCDP.DataSet.Column[];
            /**
             * 替换规则
             */
            rule: ReplaceNullRule | string;
        }
        /**
         * 去重
         */
        interface Distinct extends Base {
            shape: Shape.distinct;
            columns: ZModulesCDP.DataSet.Column[];
        }
    }
    /**
     * 预览数据
     */
    interface OverviewData {
    }
    /**
     * 输出节点字段比较列结构
     */
    interface CompareColumn {
        origin?: ZModulesCDP.DataSet.Column;
        name: string;
        /**
         * 字段是否在输出结构中存在
         */
        output: {
            /**
             * 表明字段名是否存在
             */
            exist: boolean;
            type: string;
            /**
             * 表明字段类型是否一致
             */
            typeNotMatch: boolean;
            origin: ZModulesCDP.DataSet.Column;
        };
        /**
         * 字段是否在数据集结构中存在
         */
        dataset: boolean;
    }
    /**
     * 修改字段
     */
    interface ModifyColumn {
        /**
         * react处理循环数据用
         */
        key?: string;
        /**
         * 原始字段
         */
        origin: ZModulesCDP.DataSet.Column;
        /**
         * 修改后的类型
         */
        modifyType?: ZModulesCDP.DataSet.Column['type'];
        /**
         * 修改后的名称
         */
        modifyName?: string;
    }
}
export default CdpFlowTypes;
