package xtools.boot.mask.anntation;

import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
import tools.jackson.databind.annotation.JsonSerialize;
import xtools.boot.mask.MaskCustom;
import xtools.boot.mask.enums.MaskType;
import xtools.boot.mask.handle.DefaultMaskHandle;
import xtools.boot.mask.serializer.MaskSerializer;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * <p>Title : Mask</p>
 * <p>Description : Mask</p>
 * <p>DevelopTools : Idea_x64_v2026.1</p>
 * <p>DevelopSystem : macOS Sequoia 15.7.5</p>
 * <p>Company : org.xujun</p>
 *
 * @author : XuJun
 * @version : 5.0.0
 * @date : 2026/1/9 10:07
 */
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@JacksonAnnotationsInside
@JsonSerialize(using = MaskSerializer.class)
public @interface Mask {

    /**
     * 脱敏类型
     *
     * @return 脱敏类型
     */
    MaskType value();

    /**
     * 是否总是脱敏(无法忽略脱敏)
     *
     * @return 是否总是脱敏
     */
    boolean always() default false;

    /**
     * 前缀不脱敏长度
     *
     * @return 前缀不脱敏长度
     */
    int prefixNoMaskLen() default 0;

    /**
     * 后缀不脱敏长度
     *
     * @return 后缀不脱敏长度
     */
    int suffixNoMaskLen() default 0;

    /**
     * 脱敏替代字符
     *
     * @return 脱敏替代字符
     */
    String maskChar() default "*";

    /**
     * 自定义脱敏接口
     *
     * @return 自定义脱敏接口
     */
    Class<? extends MaskCustom> custom() default DefaultMaskHandle.class;

}
