package link.at17.mid.tushare.data.models;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang3.StringUtils;

import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonIgnore;
import link.at17.mid.tushare.data.typehandler.JsonListTypeHandler;
import link.at17.mid.tushare.system.util.EncryptUtils;
import lombok.Data;

/**
 * 存储更新方法信息
 */
@Data
public class UpdateMethodInfo {
    
    /**
     * 方法名
     */
    private String methodName;

    /**
     * 方法所在类名
     */
    private String declaringClassName;
    
    /**
     * 方法友好名称，供前端展示用
     */
    private String name;
    
    /**
     * 参数列表
     */
    @TableField(typeHandler = JsonListTypeHandler.class)
    private List<UpdateParamInfo> params = new ArrayList<>();
    
    /**
     * 方法 id, 前端调用、传参时避免通过前端直接暴露类名和方法名
     */
    private String id;
    
    public String getId() {
        if (StringUtils.isBlank(id) && !StringUtils.isAnyBlank(methodName, declaringClassName)) {
            id = EncryptUtils.sha256(declaringClassName + '$' + methodName);
        }
        return id;
    }
    
    @Data
    public static class UpdateParamInfo {
        private String fullTypeName;
        private String typeName;
        private String name;
        @JsonIgnore
        private Class<?> typeClass;
        private List<String> allowedEnumValues;
        private Object value;
    }

}
