package com.bonus.system.api.domain;

import com.alibaba.fastjson2.JSON;
import com.bonus.common.core.utils.DateUtils;
import com.bonus.common.core.utils.ServletUtils;
import com.bonus.common.core.utils.StringUtils;
import com.bonus.common.core.utils.ip.IpUtils;

import com.bonus.system.api.model.LoginUser;
import lombok.Data;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.ibatis.type.Alias;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.springframework.http.HttpMethod;
import org.springframework.validation.BindingResult;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Collection;
import java.util.Map;
import java.util.UUID;


@Data
@Alias("SysLogsVo")
public class SysLogsVo {
    /**
     * 日志id
     */
    private String logId;
    /**
     * 操作人名称
     */
    private String operaUserName;
    /**
     * 访问ip
     */
    private String ip;
    /**
     * 操作人id
     */
    private String userId;
    /**
     * 操作模块
     */
    private String model;
    /**
     * 操作时间
     */
    private String operaTime;
    /**
     * 操作详情
     */
    private String  operateDetail;
    /**
     *操作类型
     */
    private String  operaType;
    /**
     * 操作方法
     */
    private String method;
    /**
     *请求路径
     */
    private String operaUri;
    /**
     * 日志类型 1 业务日志 0 系统日志  2异常日志
     */
    private int logType;
    /**
     * 执行结果
     */
    private String result;
    /**
     * 执行时间
     */
    private String times;
    /**
     * 失败原因
     */
    private String failureReason;
    /**
     * 异常等级
     */
    private String grade;
    /**
     * 异常类型(ip异常/越权)
     */
    private String errType;
    /**
     * 方法类型
     */
    private String methodType;
    /**
     * 模块名称
     */
    private String title;

    private String params;
    /**
     * 返回的数据
     */
    private String resultData;


    /**
     * 越权记录
     * @param loginUser
     * @return
     */
    public static  SysLogsVo  getSysLogsVo(LoginUser loginUser, ProceedingJoinPoint joinPoint)  {
        SysLogsVo vo=new SysLogsVo();
        try{
            String uuid= UUID.randomUUID().toString().replace("-","").toUpperCase();
            vo.setLogId(uuid);
            String ip = IpUtils.getIpAddr();
            vo.setIp(ip);
            // 设置方法名称
            String className = joinPoint.getTarget().getClass().getName();
            String methodName = joinPoint.getSignature().getName();
            //方法
            vo.setMethod(className + "." + methodName + "()");
            //请求方法
            vo.setMethodType(ServletUtils.getRequest().getMethod());
            //void->无参数返回的
            vo.setResult("0");
            vo.setFailureReason("操作未授权");
            vo.setGrade("高");
            vo.setErrType("越权访问");
            vo.setOperaUri(StringUtils.substring(ServletUtils.getRequest().getRequestURI(), 0, 255));
            vo.setOperaTime(DateUtils.getTime());
            vo.setLogType(2);
         //
            if (StringUtils.isNotBlank(loginUser.getUsername())) {
                vo.setOperaUserName(loginUser.getUsername());
            }
            Long userId=loginUser.getUserid();
            if (userId!=null && userId!=0L) {
                vo.setUserId(userId.toString());
            }
            return  vo;
        }catch (Exception e){
            System.err.println("越权记录");
        }
        return  vo;

    }




}
