package thyyxxk.webserver.config;

import thyyxxk.webserver.config.exception.BizException;
import thyyxxk.webserver.config.exception.ExceptionEnum;
import thyyxxk.webserver.config.exception.ExceptionEnumInterface;
import thyyxxk.webserver.utils.StringUtil;

public interface Assertion {

    default void exception(ExceptionEnumInterface exceptionEnum) {
        throw new BizException(exceptionEnum);
    }

    default void exception(ExceptionEnum exceptionEnum, String message) {
        throw new BizException(exceptionEnum, message);
    }

    /**
     * 如果是对的就执行， 不对的话报错
     *
     * @param value         value
     * @param exceptionEnum 报错信息
     */
    default void isTrue(boolean value, ExceptionEnum exceptionEnum) {
        if (!value) {
            exception(exceptionEnum);
        }
    }

    /**
     * 如果是对的就执行， 不对的话报错
     *
     * @param value        value
     * @param errorMessage 错误信息
     */
    default void isTrue(boolean value, String errorMessage) {
        if (!value) {
            exception(ExceptionEnum.LOGICAL_ERROR, errorMessage);
        }
    }

    /**
     * 如果是真的就报错
     *
     * @param value 值
     * @param message 消息
     */
    default void isTrueErr(boolean value, String message) {
        if (value) {
            exception(ExceptionEnum.LOGICAL_ERROR, message);
        }
    }

    default void isFalse(boolean value, ExceptionEnum exceptionEnum) {
        if (value) {
            exception(exceptionEnum);
        }
    }

    default void notBlank(String str, ExceptionEnum exceptionEnum, String errorMessage) {
        if (StringUtil.notBlank(str)) {
            exception(exceptionEnum, errorMessage);
        }
    }

    default void notBlank(String str, ExceptionEnum exceptionEnum) {
        if (StringUtil.notBlank(str)) {
            exception(exceptionEnum);
        }
    }

    default void isBlank(String str, String message) {
        if (StringUtil.isBlank(str)) {
            exception(ExceptionEnum.LOGICAL_ERROR, message);
        }
    }

    default void isNull(Object obj, ExceptionEnum exceptionEnum) {
        if (obj == null) {
            exception(exceptionEnum);
        }
    }

    default void isNoll(Object obj, String message) {
        if (obj == null) {
            exception(ExceptionEnum.LOGICAL_ERROR, message);
        }
    }

    default <T> T nullIf(T value, T defaultValue) {
        return StringUtil.nullIf(value, defaultValue);
    }

}
