package com.billion.common.enums;

import java.util.function.Function;
import com.billion.common.utils.DesensitizedUtil;

/**
 * �掩�靏糸��
 *
 * @author ruoyi
 */
public enum DesensitizedType
{
    /**
     * 紮���鐚�膃�2篏����傑�炊��
     */
    USERNAME(s -> s.replaceAll("(\\S)\\S(\\S*)", "$1*$2")),

    /**
     * 絲���鐚������膃��順��*篁f��
     */
    PASSWORD(DesensitizedUtil::password),

    /**
     * 荳�蚕莚�鐚�筝㊨��10篏����傑�炊��
     */
    ID_CARD(s -> s.replaceAll("(\\d{4})\\d{10}(\\d{3}[Xx]|\\d{4})", "$1** **** ****$2")),

    /**
     * ���阪埦�筝㊨��4篏����傑�炊��
     */
    PHONE(s -> s.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2")),

    /**
     * �球����鐚�篁��丞ず膃��筝��罸���@���∝���医���丞ず鐚��銀����傑�炊��
     */
    EMAIL(s -> s.replaceAll("(^.)[^@]*(@.*$)", "$1****$2")),

    /**
     * �区��≦埦�篆�������4篏�鐚��銀����傑�炊��
     */
    BANK_CARD(s -> s.replaceAll("\\d{15}(\\d{3})", "**** **** **** **** $1")),

    /**
     * 莉����欠��鐚���������莉�����域�醇�莉��
     */
    CAR_LICENSE(DesensitizedUtil::carLicense);

    private final Function<String, String> desensitizer;

    DesensitizedType(Function<String, String> desensitizer)
    {
        this.desensitizer = desensitizer;
    }

    public Function<String, String> desensitizer()
    {
        return desensitizer;
    }
}