package com.jeesharp.business.modules.setting.enums;

import cn.hutool.core.util.StrUtil;
import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 隐私政策/法律文档「展示端」枚举。
 * <p>
 * 数据库存储原始富文本 HTML（以 PC 端为基准），按本枚举在响应时做端适配输出：
 * <ul>
 *     <li>{@link #PC}：原文返回，不做任何改写；</li>
 *     <li>{@link #H5}：注入图片/表格自适应样式，剥离危险标签与事件属性；</li>
 *     <li>{@link #MP}：在 H5 基础上额外去除 class、{@code <iframe>}、{@code <video>} 等
 *     小程序 {@code <rich-text>} 不支持的内容，并把 {@code <table>} 降级为段落，避免页面空白。</li>
 * </ul>
 *
 * @author jeesharp
 * @since 2026-05-29
 */
@Getter
@AllArgsConstructor
public enum PrivacyPolicyClientEnum {

    /** 管理端 / 后台预览，返回原始 HTML。 */
    PC("PC", "管理端"),
    /** 浏览器/H5 端。 */
    H5("H5", "H5/浏览器"),
    /** 微信小程序。 */
    MP("MP", "微信小程序");

    /** 端标识，大小写不敏感。 */
    private final String code;
    private final String desc;

    /** 默认端：当 client 参数为空或非法时使用。 */
    public static final PrivacyPolicyClientEnum DEFAULT_FOR_MOBILE = MP;

    public static final PrivacyPolicyClientEnum DEFAULT_FOR_ADMIN = PC;

    /**
     * 解析端标识，识别失败返回 {@code fallback}。
     *
     * @param code     端标识字符串，允许大小写混写、前后空白
     * @param fallback 兜底端
     */
    public static PrivacyPolicyClientEnum fromCode(String code, PrivacyPolicyClientEnum fallback) {
        if (StrUtil.isBlank(code)) {
            return fallback;
        }
        String normalized = code.trim().toUpperCase();
        for (PrivacyPolicyClientEnum item : values()) {
            if (item.code.equals(normalized)) {
                return item;
            }
        }
        return fallback;
    }
}
