package com.infynova.udi.exception;

import com.infynova.udi.common.api.ResponseData;
import com.infynova.udi.common.exception.SaasException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.annotation.Order;
import org.springframework.validation.BindException;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import javax.servlet.http.HttpServletResponse;
import java.util.Objects;

@Slf4j
@Order(value = 1)
@RestControllerAdvice
public class UdiExceptionHandler {
    /**
     * 验证异常
     */
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ResponseData handlerNoFoundException(MethodArgumentNotValidException e, HttpServletResponse response) {
        response.setStatus(200);
        return ResponseData.error(CommonExceptionCode.SYSTEM_501.getCode(), Objects.requireNonNull(e.getBindingResult().getFieldError()).getDefaultMessage());
    }

    /**
     * 验证异常get
     */
    @ExceptionHandler(BindException.class)
    public ResponseData handlerNoFoundGetException(BindException e, HttpServletResponse response) {
        response.setStatus(200);
        return ResponseData.error(CommonExceptionCode.SYSTEM_501.getCode(), Objects.requireNonNull(e.getBindingResult().getFieldError()).getDefaultMessage());
    }

    /**
     * 业务异常
     */
    @ExceptionHandler(UdiCodeException.class)
    public ResponseData handlerNoFoundException(UdiCodeException e, HttpServletResponse response) {
        response.setStatus(200);
        return ResponseData.error(e.getCode());
    }

}