package shkd.repc.rebm.formplugin;

import kd.bos.bill.AbstractBillPlugIn;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.dataentity.entity.LocaleString;
import kd.bos.dataentity.metadata.IDataEntityProperty;
import kd.bos.dataentity.metadata.dynamicobject.DynamicProperty;
import kd.bos.dataentity.utils.StringUtils;
import kd.bos.entity.datamodel.events.PropertyChangedArgs;
import kd.bos.entity.property.*;
import kd.bos.form.control.EntryGrid;
import kd.bos.form.field.BasedataEdit;
import kd.bos.metadata.dao.MetaCategory;
import kd.bos.metadata.dao.MetadataDao;
import kd.bos.metadata.form.FormMetadata;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.MetadataServiceHelper;
import kd.sdk.plugin.Plugin;

/**
 * 【函件模板】-【插入字段扩展(二开页面)】
 */
public class CustomFieldTemplatePlugin extends AbstractBillPlugIn implements Plugin {

    @Override
    public void propertyChanged(PropertyChangedArgs e) {
        super.propertyChanged(e);
        String fieldKey = e.getProperty().getName();
        //模板类型
        if (StringUtils.equals(fieldKey, "qeug_templatetype")) {
            handleSetFieldsValue();
        }
        //分录源单标识
        else if (StringUtils.equals(fieldKey, "qeug_sourceid")){
            handleSetEntityName();
        }
        //分录字段标识
        else if (StringUtils.equals(fieldKey, "qeug_fieldid")){
            handleSetEntryFieldsValue();
        }
    }



    /**
     * 设置表头字段
     */
    private void handleSetFieldsValue() {
        //获取选中下拉值
        String value = (String) this.getModel().getValue("qeug_templatetype");
        DynamicObject insertDynamic = BusinessDataServiceHelper.loadSingle("qeug_insertfield", (new QFilter("number", QCP.equals, value.toString())).toArray());
        if (null!=insertDynamic){
            this.getView().showMessage("已存在编码为:"+value+"的模板,请勿重复生成!");
            return;
        }
        switch (value){
            //邀请函
            case "INVITATION":
                this.getModel().setValue("qeug_defaultfield","invitation");
                break;
            //质疑函
            case "OBJECTION_LETTER":
                this.getModel().setValue("qeug_defaultfield","query");
                break;
            //感谢信
            case "THANK_YOU_LETTER":
                this.getModel().setValue("qeug_defaultfield","thanksletter");
                break;
            //招标公告
            case "TENDER_ANNOUNCEMENT":
                this.getModel().setValue("qeug_defaultfield","bidproject");
                break;
            //中标公告
            case "TENDER_RESULT_ANNOUNCEMENT":
                this.getModel().setValue("qeug_defaultfield","decision");
                break;
            //中标通知
            case "BID_NOTICE":
                this.getModel().setValue("qeug_defaultfield","bidnotification");
                break;
            //商务谈判邀约函
            case "BUSINESS_NEGOTIATION_INVITATION":
                this.getModel().setValue("qeug_defaultfield","negotiate");
                break;
            //评标邀请函
            case "EVALUATION_INVITATION":
                this.getModel().setValue("qeug_defaultfield","bidassinvite");
                break;
        }
        //获取下拉列表字段
        ComboProp comboProp = (ComboProp) getModel().getProperty("qeug_templatetype");
        //通过下拉值获取下拉标题
        String displayName = comboProp.getItemByName(value);
        this.getModel().setValue("number",value);
        this.getModel().setValue("name",displayName+"扩展字段");
    }

    /**
     * 源单名称赋值
     */
    private void handleSetEntityName() {
        //分录数据
        DynamicObjectCollection entryEntity = this.getModel().getEntryEntity("qeug_entryentity");
        //选中的分录数据
        EntryGrid entryGrid = this.getControl("qeug_entryentity");
        int[] selectRows = entryGrid.getSelectRows();
        if (selectRows.length==1) {
            String entityName = entryEntity.get(selectRows[0]).getString("qeug_sourceid");
            if (!entityName.isEmpty()){
                String id = MetadataDao.getIdByNumber(entityName, MetaCategory.Form);
                if (null==id){
                    this.getView().showMessage("请填写正确的源单标识!");
                    return;
                }
                FormMetadata formMeta = (FormMetadata) MetadataDao.readRuntimeMeta(id, MetaCategory.Form);
                //单据名称
                LocaleString name = formMeta.getName();
                if (null!=name){
                    this.getModel().setValue("qeug_sourcename",name);
                }
            }
        }
        this.getView().updateView("qeug_entryentity");
    }

    /**
     *设置分录字段
     */
    private void handleSetEntryFieldsValue() {
        //分录数据
        DynamicObjectCollection entryEntity = this.getModel().getEntryEntity("qeug_entryentity");
        //选中的分录数据
        EntryGrid entryGrid = this.getControl("qeug_entryentity");
        int[] selectRows = entryGrid.getSelectRows();
        if (selectRows.length==1){
            String entityName = entryEntity.get(selectRows[0]).getString("qeug_sourceid");
            if (!entityName.isEmpty()){
                String fieldName = entryEntity.get(selectRows[0]).getString("qeug_fieldid");
                if (!fieldName.isEmpty()){
                    IDataEntityProperty property = MetadataServiceHelper.getDataEntityType(entityName).getProperty(fieldName);
                    if (null==property){
                        this.getView().showMessage("源单:"+entityName+"未找到字段:"+fieldName+"信息!");
                        return;
                    }
                    //字段名
                    String localeValue_zh_cn = property.getDisplayName().getLocaleValue_zh_CN();
                    this.getModel().setValue("qeug_fieldname",localeValue_zh_cn,selectRows[0]);
                    //字段类型
                    String fieldType;
                    if (property instanceof TextProp){
                        fieldType="TextProp";
                    }else if (property instanceof DecimalProp){
                        fieldType="DecimalProp";
                    }else if (property instanceof DateTimeProp){
                        fieldType="DateTimeProp";
                    }else if (property instanceof BasedataProp){
                        fieldType="BasedataProp";
                    }else if (property instanceof ComboProp){
                        fieldType="ComboProp";
                    }else if (property instanceof BooleanProp){
                        fieldType="BooleanProp";
                    }else if (property instanceof VarcharProp) {
                        fieldType = "VarcharProp";
                    }else if (property instanceof LongProp){
                        fieldType="LongProp";
                    }else {
                        this.getView().showMessage("暂不支持该字段类型!");
                        return;
                    }
                    this.getModel().setValue("qeug_fieldtype",fieldType,selectRows[0]);
                }
            }
        }
        this.getView().updateView("qeug_entryentity");
    }
}