import { CommonConfig } from "./share_types";
import YaoAction from "./action";
import YaoComponent from "./component";
import YaoField from "./field";
import YaoHook from "./hook";

export namespace YaoChart {
  export enum ChartComponentEnum {
    "Bar" = "Bar",
    "Funnel" = "Funnel",
    "Line" = "Line",
    "LineBar" = "LineBar",
    "Number" = "Number",
    "NumberChart" = "NumberChart",
    "Pie" = "Pie",
    "Table" = "Table",
  }
  export interface ChartDSL {
    /**版本【管理字段】 */
    version?: string;
    /**描述【管理字段】 */
    decription?: string;
    /**备注【管理字段】 */
    comment?: string;
    /**唯一标识 */
    id?: string;
    /**图表名称, 支持多语言 */
    name?: string;
    /**图表数据交互。用于指定统计数据读取处理器，设置数据 Hook，绑定模型等 */
    action?: ActionDSL;
    /**图表界面布局。字段、筛选器等 */
    layout?: LayoutDSL;
    /**图表字段定义。指定图表字段, 图表筛选器字段定义 */
    fields?: FieldsDSL;
    /**图表界面配置项。图表满屏显示等配置*/
    config?: CommonConfig;
    // cProps: field.CloudProps;
    // computable: compute.Computable;
    // mapping: mapping.Mapping;
    $schema?: string;
  }

  export interface ActionDSL {
    /**关联处理器。返回图表页面配置 */
    setting?: YaoAction.Process;
    // component?: action.Process;
    /**关联处理器。指定数据图表分析结果处理器，返回图表数据*/
    data?: YaoAction.Process;
    /**Before Hook。在关联处理器之前运行，输入用户输入的参数表，返回处理后的参数表 */
    "before:data"?: YaoHook.Before;
    /**After Hook。在关联处理器之后运行，输入关联处理器返回结果，返回处理后的结果 */
    "after:data"?: YaoHook.After;
  }

  export interface FieldsDSL {
    filter?: YaoField.Filters;
    chart?: ChartColumns;
    // filterMap?: { [key: string]: field.FilterDSL };
    // chartMap?: { [key: string]: field.ColumnDSL };
  }

  // Columns the columns DSL
  export type ChartColumns = { [key: string]: ChartColumnDSL };

  // ColumnDSL the field column dsl
  export type ChartColumnDSL = {
    /**唯一标识 */
    id?: string;
    $data?: YaoComponent.CloudPropsDSL;
    /**列主键名，不需要显式设置 */
    key?: string;
    /**默认绑定API接口返回字段名称 */
    bind?: string;
    /**chart图表链接地址 */
    link?: string;
    /** 显示控件设置 */
    view?: ChartComponentDSL;
    /** 编辑控件设置 */
    // edit?: YaoComponent.EditComponentDSL;
  };

  export interface ChartComponentDSL {
    /**绑定字段名称，如不指定使用默认值 */
    bind?: string;
    /**组件名称，可用组件参考文档 https://yaoapps.com/components */
    type?: ChartComponentEnum | string | "public/xxx";
    /**数据数值计算 */
    compute?: YaoComponent.Compute | string;
    /**控件属性，可参考antd控件 */
    props?: YaoComponent.PropsDSL & {
      /**显示成卡片的样式 */
      cardStyle?: YaoComponent.PropsDSL & {
        padding?: number;
      };
      type?: string;
      /**图表高度 */
      chartHeight?: number;
      /**颜色 */
      color?: string;
      /**显示单位 */
      unit?: string;
      /**显示前缀 */
      prefix?: string;
      /** */
      decimals?: number;
      /**绑定数据的key字段 */
      nameKey?: string;
      /**绑定数据的value字段 */
      valueKey?: string;
    };
  }

  export interface LayoutDSL {
    /**图表界面头部布局。设置批量操作、导入配置等 */
    operation?: OperationLayoutDSL;
    /**图表布局。设置显示，行操作按钮等 */
    chart?: ViewLayoutDSL;
    /**图表筛选器。设置筛选条件和右上角操作按钮等 */
    filter?: FilterLayoutDSL;
  }

  export interface FilterLayoutDSL {
    /**自定义操作按钮 */
    actions?: YaoComponent.Actions;
    /**筛选条件, 在 fields.filter 中定义的筛选条件字段 */
    columns?: YaoComponent.LayoutColumns;
  }

  export interface OperationLayoutDSL {
    actions?: YaoComponent.Actions;
  }

  export interface ViewLayoutDSL {
    columns?: YaoComponent.LayoutColumns;
  }
}
export default YaoChart;
