import { IPublicTypeComponentMetadata, IPublicTypeSnippet } from '@alilc/lowcode-types';
import { common } from '@alilc/lowcode-engine';

const OadpEntityButtonReadConditionMeta: IPublicTypeComponentMetadata = {
  "componentName": "OadpEntityButtonReadCondition",
  "title": "实体条件查询",
  "category": "高级组件",
  "group": "低代码组件",
  "docUrl": "",
  "screenshot": "https://img.alicdn.com/imgextra/i1/O1CN01O4Oshp1RA6Z0sFZ6h_!!6000000002070-55-tps-56-56.svg",
  "devMode": "proCode",
  "npm": {
    "package": "oadp-material",
    "version": "{{version}}",
    "exportName": "OadpEntityButtonReadCondition",
    "main": "src/index.tsx",
    "destructuring": true,
    "subName": ""
  },
  "configure": {
    "props": [
      {
        "name": "DataSetting",
        "title": "数据设置",
        "type": "group",
        "display": "block",
        "items": [  
          {
            "name": "label",
            "title": {
              "label": {
                "type": "i18n",
                "zh_CN": "标题",
                "en_US": "Label",
              },
              "tip": {
                "type": "i18n",
                "zh_CN": "属性: label | 说明: 标题",
                "en_US": "prop: label | description: label content",
              },
            },
            "setter": "StringSetter",
            "description": "标题",
          }, 
          {
            "name": "name",
            "title": {
              "label": {
                "type": "i18n",
                "zh_CN": "表单标识",
                "en_US": "Name",
              },
              "tip": {
                "type": "i18n",
                "zh_CN": "属性: name | 说明: 表单标识",
                "en_US": "prop: name | description: switch name",
              },
            },
            "setter": "StringSetter", 
            "supportVariable": false,
          }, 
          {
            "name": "id",
            "title": {
              "label": {
                "type": "i18n",
                "zh_CN": "唯一标识",
                "en_US": "ID",
              },
              "tip": {
                "type": "i18n",
                "zh_CN": "属性: id | 说明: 唯一标识",
                "en_US": "prop: id | description: switch id",
              },
            },
            "setter": "StringSetter" 
          }, 
          { 
            "name": "entity",
            "title": {
              "label": {
                "type": "i18n",
                "en-US": "Entity",
                "zh-CN": "绑定实体"
              },
              "tip":  {
                "type": "i18n",
                "zh_CN": "属性: entity | 说明:绑定实体",
                "en_US": "prop: entity | description: Set Entity.",
              },
            },
            "description": "绑定实体",
            "setter": "OadpEntitySetter",
            "supportVariable": true,
          },  
          {
            "name": "tableComponentRefId",
            "title": {
              "label": {
                "type": "i18n",
                "zh_CN": "联动表格",
                "en_US": "Bind Table Component",
              },
              "tip": {
                "type": "i18n",
                "zh_CN": "属性: tableComponentRefId | 说明: 联动表格",
                "en_US": "prop: tableComponentRefId | description: Bind Table Component",
              },
            },
            "setter": "StringSetter" 
          },
          {
            "name": "defaultValue",
            "title": {
              "label": {
                "type": "i18n",
                "zh_CN": "默认条件",
                "en_US": "Default Condition",
              },
              "tip": {
                "type": "i18n",
                "zh_CN": "属性: defaultValue | 说明: 默认条件",
                "en_US": "prop: defaultValue | description: Default Condition",
              },
            }, 
            "setter": {
              "componentName": "OadpEntityFilterSetter",
              "props": (target: IPublicModelSettingField) => ({
                "entity": target.parent.getPropValue('entity'),
              }),
              "initialValue": { 
                "operator": "and",
                "value": [{ 
                  "attribute": "",
                  "operator": "and",
                  "value": ""
                }]
              }
            },
            "supportVariable": true,
            "description": "默认条件",
          }, 
        ]
      },
      {
        "name": "DisplaySetting",
        "title": "显示设置",
        "type": "group",
        "display": "block",
        "items": [ 
          {
            "name": "type",
            "title": {
              "label": {
                "type": "i18n",
                "en-US": "type",
                "zh-CN": "类型"
              },
              "tip": "type | 类型"
            },
            "description": "类型",
            "setter": {
              "componentName": "RadioGroupSetter",
              "props": {
                "dataSource": [
                  {
                    "label": "主按钮",
                    "value": "primary"
                  },
                  {
                    "label": "次按钮",
                    "value": "secondary"
                  },
                  {
                    "label": "普通按钮",
                    "value": "normal"
                  }
                ],
                "options": [
                  {
                    "label": "主按钮",
                    "value": "primary"
                  },
                  {
                    "label": "次按钮",
                    "value": "secondary"
                  },
                  {
                    "label": "普通按钮",
                    "value": "normal"
                  }
                ]
              },
              "initialValue": "primary"
            }
          },
          {
            "title": {
              "label": {
                "type": "i18n",
                "en-US": "size",
                "zh-CN": "尺寸"
              },
              "tip": "size | 尺寸"
            },
            "name": "size",
            "description": "尺寸",
            "setter": {
              "componentName": "RadioGroupSetter",
              "props": {
                "dataSource": [ 
                  {
                    "label": "中",
                    "value": "medium"
                  },
                  {
                    "label": "大",
                    "value": "large"
                  }
                ],
                "options": [ 
                  {
                    "label": "中",
                    "value": "medium"
                  },
                  {
                    "label": "大",
                    "value": "large"
                  }
                ]
              },
              "initialValue": "medium"
            }
          }, 
        ]
      }, 
      {
        "name": "InteractionSetting",
        "title": "交互设置",
        "type": "group",
        "display": "block",
        "items": [ 
          {
            "name": "queryAttributeBar",
            "title": {
              "label": {
                "type": "i18n",
                "en-US": "Query Attribute Bar",
                "zh-CN": "查询属性栏"
              },
              "tip": {
                "type": "i18n",
                "zh_CN": "属性: queryAttributeBar | 说明: 查询属性栏",
                "en_US": "prop: queryAttributeBar | description: Query Attribute Bar",
              },
            },
            "description": "查询属性栏", 
            "setter": {
              "componentName": "SlotSetter",
              "isRequired": true,
              "initialValue": {
                "type": "JSSlot",
                "params": ["value", "index", "record"],
                "value": [  
                ]
              }
            },
            "condition": () => true,
          }, 
          {
            "title": {
              "label": {
                "type": "i18n",
                "en-US": "disabled",
                "zh-CN": "是否禁用"
              },
              "tip": "disabled | 是否禁用"
            },
            "name": "disabled",
            "description": "是否禁用",
            "setter": {
              "componentName": "BoolSetter",
              "isRequired": false,
              "initialValue": false
            }
          },
        ]
      },
    ],
    "supports": {
      "events": ["onClick"],
      "style": true
    },
    "component": {
      "isContainer": true
    },  
    "advanced": {
      "callbacks": {
        "onNodeAdd": (dragment, currentNode) => {
          console.log('OadpEntityButtonReadCondition onNodeAdd with ', dragment, currentNode);  

          // 检查 dragment 是否为 null
          if (!dragment) {
            console.error('dragment is null');
            return;
          }

          // 检查 currentNode 是否为 null
          if (!currentNode) {
            console.error('currentNode is null');
            return;
          }
          // 检查 currentNode.document 是否为 null
          if (!currentNode.document) {
            console.error('currentNode.document is null');
            return;
          }

          const dragmentSchema = dragment?.exportSchema(common.designerCabin.TransformStage.Save); 
          console.log('OadpEntityButtonReadCondition dragment.exportSchema()', dragmentSchema); 
          if (dragmentSchema.componentName === 'OadpEntityButtonCreate'
            || dragmentSchema.componentName === 'OadpEntityButtonDelete' 
            || dragmentSchema.componentName === 'OadpEntityButtonUpdate'  
            || dragmentSchema.componentName === 'OadpEntityButtonReadFast' 
            || dragmentSchema.componentName === 'OadpEntityButtonReadCondition'
            || dragmentSchema.componentName === 'OadpEntityButtonReadRule'
            || dragmentSchema.componentName === 'OadpEntityButtonBatchDelete' 
            || dragmentSchema.componentName === 'OadpEntityButtonSettingTable'
            || dragmentSchema.componentName === 'OadpEntityPagination') { 
            const currentNodeSchema = currentNode?.exportSchema(common.designerCabin.TransformStage.Save);
            console.log('OadpEntityButtonReadCondition currentNodeSchema ', currentNodeSchema); 
            const entity = currentNodeSchema?.props?.entity;
            dragment.setPropValue('entity', entity); 
            dragment.setPropValue('tableComponentRefId', currentNodeSchema.id);  
            console.log('OadpEntityButtonReadCondition dragment update exportSchema()', dragment?.exportSchema(common.designerCabin.TransformStage.Save));
          } 

          if (dragmentSchema.componentName === 'OadpAttribute') {
            const name = dragmentSchema?.props?.name ?? "默认名称";
            const logicalName = dragmentSchema?.props?.logicalName ?? "默认逻辑名称";
            const attributeType = dragmentSchema?.props?.attributeType ?? "STRING";
            const referEntity = dragmentSchema?.props?.referEntity;
            const referAttribute = dragmentSchema?.props?.referAttribute;

            let dataIndex = logicalName;
            if (attributeType === "REFER" && referAttribute && typeof referAttribute === 'object' && 'logicalName' in referAttribute) {
              dataIndex = logicalName + '.name' ;
            }
            console.log('OadpEntityButtonReadCondition dragment.exportSchema() dataIndex', dataIndex);
              
            // 如果拖拽到表格内，需要转换元素为表格列   
            const layoutPNode = currentNode.document.createNode({
              "componentName": "OadpTableColumn",
              "props": {
                "title": name,
                "dataIndex": dataIndex, 
                "htmlTitle": logicalName,
                "alignHeader": "center",
                "width": 200,
                "align": "center",
                "wordBreak": "all",
              }
            });
            console.log('OadpEntityButtonReadCondition onNodeAdd layoutPNode', layoutPNode); 

            // 检查 layoutPNode 是否为 null
            if (!layoutPNode) {
              console.error('OadpEntityButtonReadCondition layoutPNode is null');
              return;
            }
            
            console.log('OadpEntityButtonReadCondition onNodeAdd currentNode', currentNode); 
            // 当前dragment还未添加入node子节点,需要setTimeout处理
            setTimeout(() => {
              currentNode.replaceChild(
                dragment,
                layoutPNode.exportSchema(common.designerCabin.TransformStage.Save)
              );
            }, 1); 
          }
        },
      },
    },
  }
};
const snippets: IPublicTypeSnippet[] = [
  {
    "title": "实体条件查询",
    "screenshot": "https://img.alicdn.com/imgextra/i1/O1CN01O4Oshp1RA6Z0sFZ6h_!!6000000002070-55-tps-56-56.svg",
    "schema": {
      "componentName": "OadpEntityButtonReadCondition",
      "props": { 
        "label": "条件查询",
        "type": "primary",
        "size": "medium",
        "disabled": false, 
        "onClick": {
          "type": "JSExpression",
          "value": "function() {\n      const self = this;\n      try {\n        return (function (v,e){ return this.utils.eventUtil.onReadRule.apply(this,Array.prototype.slice.call(arguments).concat([{\n\t\"schema\": this.schema\n}])) }).apply(self, arguments);\n      } catch(e) {\n        console.warn('call function which parsed by lowcode failed: ', e);\n        return e.message;\n      }\n    }"
        },
        "__events": {
          "eventDataList": [
            {
              "type": "componentEvent",
              "name": "onClick",
              "relatedEventName": "onClick",
              "paramStr": "{\n\t\"schema\": this.schema\n}"
            }
          ],
          "eventList": [
            {
              "name": "onClick",
              "disabled": true
            }
          ]
        },
        "style": {
          "marginRight": "5px"
        }
      },
      "hidden": false,
      "title": "",
      "isLocked": false,
      "condition": true,
      "conditionGroup": "", 
    }
  }
];

export default {
  ...OadpEntityButtonReadConditionMeta,
  snippets
};
