package cc.smtweb.framework.core.mvc.controller.access;

import cc.smtweb.framework.core.mvc.controller.IBeanContext;

import javax.servlet.http.HttpServletRequest;
import java.util.Map;

/**
 * API方法访问接口
 *
 * @author xkliu
 */
public interface IMethodAccess {
    // 方法返回值Java类型
    Class<?> getReturnType();

    // @SwBody 注解Java类型
    Class<?> getBodyType();

    // @SwAttr 注解Java类型
    Class<?> getAttrType(String paramName);

    /**
     * 执行反射的API函数，一般时定时器等无参数环境调用
     *
     * @param context 对象上下文
     * @return API函数返回值
     */
    Object invoke(IBeanContext context);

    /**
     * 执行类方法，实现API调用
     *
     * @param context 上下文对象，包括springboot服务类，@SwBean类
     * @param params  url请求参数map
     * @param body    post请求的内容
     * @param request HTTP请求对象
     * @return 应答对象，一般是返回R转换为json返回
     */
    Object invoke(IBeanContext context, Map<String, Object> params, String body, HttpServletRequest request);

    /**
     * 输出错误信息用，方法全名
     *
     * @return 方法全名
     */
    String fullName();

}
