package com.spring.infra.security.error;

import org.springframework.http.HttpStatus;

import com.spring.common.error.ErrorRule;

import lombok.Getter;
import lombok.RequiredArgsConstructor;

@Getter
@RequiredArgsConstructor
public enum SecurityExceptionRule implements ErrorRule {
    
    SYSTEM_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "시스템 오류 입니다."),
    UNSUPPORTED_MEDIA_ERROR(HttpStatus.UNSUPPORTED_MEDIA_TYPE, "지원되지 않는 유형 입니다."),
    USER_BAD_REQUEST(HttpStatus.BAD_REQUEST, "사용자 정보가 올바르지 않습니다."),
    USER_UNAUTHORIZED(HttpStatus.UNAUTHORIZED, "사용자 인증에 실패 하였습니다."),
    USER_NOT_PASSWORD(HttpStatus.UNAUTHORIZED, "비밀번호가 틀립니다."),
    USER_FORBIDDEN(HttpStatus.FORBIDDEN, "사용자 권한이 없습니다."),
    USER_NOT_APPROVED(HttpStatus.FORBIDDEN, "사용자가 승인되지 않았습니다."),
    JWT_TOKEN_ERROR(HttpStatus.UNAUTHORIZED, "토큰이 잘못되었습니다."),
    JWT_TOKEN_NOT_FOUND(HttpStatus.UNAUTHORIZED, "토큰 정보가 없습니다."),
    SIGNATURE_ERROR(HttpStatus.UNAUTHORIZED, "토큰이 유효하지 않습니다."),
    MALFORMED_JWT_ERROR(HttpStatus.UNAUTHORIZED, "올바르지 않은 토큰입니다."),
    EXPIRED_JWT_ERROR(HttpStatus.UNAUTHORIZED, "토큰이 만료되었습니다. 다시 로그인해주세요.");

    private final HttpStatus status;
    private String message;

    SecurityExceptionRule(HttpStatus status, String message) {
        this.status = status;
        this.message = message;
    }

    public SecurityExceptionRule message(final String message) {
        this.message = message;
        return this;
    }

}
