package com.storlead.framework.core.context;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Locale;

/**
 * @Author Created by chenkq on 2020/4/30
 */
public interface IContext {

    /**
     * 移除属性（从会话上下文删除会话属性）
     * **/
    void removeAttribute(String attr);

    /**
     * 获取属性（从上下文获取会话属性）
     * @param attrType  指定class
     *
     * 例  getAttribute("getLoginUser", LoginUser.class)
     * **/
    <T> T getAttribute(String attr, Class<T> attrType);

    /**
     * 设置会话属性。   name在整个Context里唯一，应避免不同属性重复。
     */
    void setAttribute(String name, Object value);

    /**
     * 使得这个Context失效、与Session失效 ，   （销毁本上下文）
     *
     */
    void invalidate();

    /**
     * 初始化请求上下文。
     * @param request
     */
    void init(HttpServletRequest request, HttpServletResponse response);

    /**
     * 获取会话的sessionId
     * **/
    //String getSessionId();

    /**
     * 获取request里的请求头
     *
     * */
    <T> T getRequestHeader(String attr, Class<T> requiredType);

    /**
     * 获取客户端发请求的 get或post值
     *
     * */
    String getRequestParameter(String attr);

    /**
     * 获取请求头类
     * */
    HttpServletRequest getRequest();

    /**
     * 获取返回头类
     * **/
    HttpServletResponse getResponse();

    /**
     * 获取请求的Web站点的域名
     * 如https://store.kye.com
     */
     String getHostAddress();

    /**
     * 获取客户端IP地址
     *
     */
     String getIpAddress();

    /***
     * 获取当前Locale   如 :Locale.zh_CN
     *
     * **/
     Locale getLocale();

}
