//
//  KBHUD.h
//  keyBoard
//
//  基于 MBProgressHUD 的轻量封装，提供类似 SVProgressHUD 的类方法调用方式。
//  特性：
//  - 默认加到 KeyWindow 上
//  - 支持遮罩模式（不拦截/透明拦截/半透明黑遮罩）
//  - 默认不支持点击背景关闭；可为“本次显示/当前 HUD”开启点击关闭
//  - 文案/加载/进度/自动消失
//

#import <Foundation/Foundation.h>
@class UIView; // forward declare to avoid importing UIKit in header

typedef NS_ENUM(NSUInteger, KBHUDMaskType) {
    /// 不加遮罩，事件可透传到后面的视图（与 SVProgressHUDMaskTypeNone 类似）
    KBHUDMaskTypeNone = 0,
    /// 透明遮罩，拦截触摸但不变暗（与 SVProgressHUDMaskTypeClear 类似）
    KBHUDMaskTypeClear,
    /// 半透明黑色遮罩（与 SVProgressHUDMaskTypeBlack 类似）
    KBHUDMaskTypeBlack,
};

NS_ASSUME_NONNULL_BEGIN

@interface KBHUD : NSObject

#pragma mark - 显示
/// 纯菊花
+ (void)show;
/// 菊花 + 文案
+ (void)showWithStatus:(nullable NSString *)status;
/// 菊花 + 文案（可配置：是否允许点击背景关闭）
+ (void)showWithStatus:(nullable NSString *)status allowTapToDismiss:(BOOL)allow;
/// 圆形进度 0~1 + 文案
+ (void)showProgress:(float)progress status:(nullable NSString *)status;
/// 圆形进度 0~1 + 文案（可配置：是否允许点击背景关闭）
+ (void)showProgress:(float)progress status:(nullable NSString *)status allowTapToDismiss:(BOOL)allow;
/// 文案提示（自动隐藏）
+ (void)showInfo:(NSString *)status;
/// 成功提示（自动隐藏）
+ (void)showSuccess:(NSString *)status;
/// 失败提示（自动隐藏）
+ (void)showError:(NSString *)status;

#pragma mark - 隐藏
/// 立即隐藏
+ (void)dismiss;
/// 延时隐藏
+ (void)dismissWithDelay:(NSTimeInterval)delay;

#pragma mark - 配置（全局）
/// 设置默认遮罩类型，默认 KBHUDMaskTypeClear
+ (void)setDefaultMaskType:(KBHUDMaskType)maskType;
/// 为“当前正在展示的 HUD”设置点击背景是否关闭；若当前没有 HUD 则忽略
+ (void)setTapToDismissEnabled:(BOOL)enabled;
/// 仅本次显示：菊花（无文案）可配置是否允许点击背景关闭
+ (void)showAllowTapToDismiss:(BOOL)allow;
/// 设置自动隐藏的时长（success/error/info），默认 1.2s
+ (void)setAutoDismissInterval:(NSTimeInterval)interval;

/// 设置缺省承载视图（App Extension 环境下必须设置，例如在键盘扩展里传入 self.view）
/// 注意：内部弱引用，不会形成循环引用。
/// 若不设置，在非 Extension 的 App 内默认加到 KeyWindow；在 Extension 内将不会显示。
/// 可在 viewDidLoad 或 viewDidAppear 调用一次即可。
/// @param view 作为 HUD 的承载父视图
 + (void)setContainerView:(nullable UIView *)view;

@end

NS_ASSUME_NONNULL_END
