package yem.base.common.module.version.dynamic;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import kd.bos.dataentity.serialization.SerializationUtils;
import kd.bos.entity.datamodel.IDataModel;
import kd.bos.entity.filter.FilterCondition;
import kd.bos.form.FormShowParameter;
import kd.bos.form.IFormView;
import kd.bos.form.control.FilterGrid;
import kd.bos.form.events.AfterDoOperationEventArgs;
import kd.bos.form.plugin.AbstractFormPlugin;

import java.util.EventObject;

/**
 * 校验规则-表单插件
 * @description:回填变更方案操作校验规则
 * @author longh
 * @date 2021年11月19日 上午10:01:27
 */
public class VersionCheckRuleEdit extends AbstractFormPlugin {

	/**
	 * 在绑定数据之前进行预处理。
	 * @param e 事件对象，包含绑定数据所需的信息。
	 */
	@Override
	public void beforeBindData(EventObject e) {
	    super.beforeBindData(e);
	    // 获取表单展示参数
	    FormShowParameter showParameter = this.getView().getFormShowParameter();
	    // 从展示参数中获取实体编号
	    String entityNumber = showParameter.getCustomParam("entityNumber");
	    // 获取过滤网格控件
	    FilterGrid filterGrid = this.getView().getControl("yem_filtergridap");
	    // 设置过滤网格的实体编号
	    // 设置过滤控件关联单据实体
	    filterGrid.setEntityNumber(entityNumber);
	}

	/**
	 * 在绑定数据之后进行后续处理。
	 * @param e 事件对象，包含绑定后的数据信息。
	 */
	@Override
	public void afterBindData(EventObject e) {
	    super.afterBindData(e);
	    IFormView view = this.getView();
	    FormShowParameter showParameter = view.getFormShowParameter();
	    // 从展示参数中获取额外的数据参数
	    JSONObject data = showParameter.getCustomParam("data");
	    // 如果存在数据参数
	    if(data != null) {
	        // 从数据参数中获取校验条件
	        String yem_checkjson = data.getString("yem_checkjson");//序列化校验条件
	        // 如果校验条件不为空
	        if(!yem_checkjson.isEmpty()) {
	            JSONObject parseObject = JSON.parseObject(yem_checkjson);
	            // 从校验条件中获取过滤网格的配置
	            // 加载过滤控件数据
	            String yem_filtergridap = parseObject.getString("yem_filtergridap");
	            // 如果过滤网格配置不为空
	            if(!yem_filtergridap.isEmpty()) {
	                // 将过滤网格配置反序列化为过滤条件对象
	                FilterCondition filterCondition = SerializationUtils.fromJsonString(yem_filtergridap, FilterCondition.class);
	                // 如果条件对象不为空，则设置到过滤网格控件中
	                if (filterCondition != null){
	                	FilterGrid filterGrid = view.getControl("yem_filtergridap");
	                	filterGrid.SetValue(filterCondition);
	                }
	            }
	        }
	    }
	}

	/**
	 * 在创建新数据后进行后续处理。
	 * @param evt 事件对象，包含新创建的数据信息。
	 */
	@Override
	public void afterCreateNewData(EventObject evt) {
	    super.afterCreateNewData(evt);
	    IDataModel model = this.getModel();
	    IFormView view = this.getView();
	    FormShowParameter showParameter = view.getFormShowParameter();
	    JSONObject data = showParameter.getCustomParam("data");
	    // 如果存在数据参数
	    if(data != null) {
	        // 从数据参数中获取校验条件
	        String yem_checkjson = data.getString("yem_checkjson");//序列化校验条件
	        // 如果校验条件不为空
	        if(!yem_checkjson.isEmpty()) {
	            JSONObject parseObject = JSON.parseObject(yem_checkjson);
	            // 从校验条件中加载描述信息
	            // 加载描述
	            model.setValue("yem_desc", parseObject.getString("yem_desc"));
	            // 加载条件为真时的提示信息
	            // 加载条件为真提示
	            model.setValue("yem_truethrow", parseObject.getBoolean("yem_truethrow"));
	            // 加载错误提示信息
	            // 加载出错提示
	            model.setValue("yem_message", parseObject.getString("yem_message"));
	        }
	    }
	}

	/**
	 * 在执行操作后进行后续处理。
	 * @param e 事件参数，包含操作的关键字和其他相关信息。
	 */
	@Override
	public void afterDoOperation(AfterDoOperationEventArgs e) {
	    super.afterDoOperation(e);
	    String operateKey = e.getOperateKey();
	    // 根据操作关键字执行相应的处理
	    switch (operateKey) {
	    case "ok" :
	        this.afterDoOK();
	        break;
	    }
	}

	/**
	 * 处理确定操作，组装数据并返回给父窗口。
	 */
	private void afterDoOK() {
	    IDataModel model = this.getModel();
	    IFormView view = this.getView();
	    FilterGrid filterGrid = view.getControl("yem_filtergridap");
	    // 获取过滤网格的当前过滤条件
	    FilterCondition filterCondition = filterGrid.getFilterGridState().getFilterCondition();
	    String yem_filtergridap = "";
	    // 如果过滤条件不为空，则将其序列化为字符串
	    if (filterCondition != null){
	    	yem_filtergridap = SerializationUtils.toJsonString(filterCondition);
	    }
	    // 创建一个JSON对象，用于存储返回的数据
	    JSONObject jsonObj = new JSONObject();
	    // 将模型中的描述、抛出标志、消息和过滤条件信息添加到JSON对象中
	    jsonObj.put("yem_desc", model.getValue("yem_desc"));
	    jsonObj.put("yem_truethrow", model.getValue("yem_truethrow"));
	    jsonObj.put("yem_message", model.getValue("yem_message"));
	    jsonObj.put("yem_filtergridap", yem_filtergridap);
	    // 将数据返回给父窗口，并关闭当前窗口
	    view.returnDataToParent(jsonObj);
	    view.close();
	}
	
}
