//
//  KBFullAccessManager.h
//  统一封装：检测并管理键盘扩展的“允许完全访问”状态
//

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

typedef NS_ENUM(NSInteger, KBFullAccessState) {
    KBFullAccessStateUnknown = 0,  // 无法确定（降级处理为未开启）
    KBFullAccessStateDenied,       // 未开启完全访问
    KBFullAccessStateGranted       // 已开启完全访问
};

/// 状态变更通知（仅扩展进程内广播）
extern NSNotificationName const KBFullAccessChangedNotification;

/// 键盘扩展“完全访问”状态管理
@interface KBFullAccessManager : NSObject

+ (instancetype)shared;

/// 绑定当前的 UIInputViewController（用于调用系统私有选择器 hasFullAccess；按字符串反射，避免编译期引用）
- (void)bindInputController:(UIInputViewController *)ivc;

/// 当前状态（内部做缓存；如需强制刷新，调用 refresh）
- (KBFullAccessState)currentState;

/// 便捷判断
- (BOOL)hasFullAccess;

/// 立即刷新一次状态（若状态有变化会发送 KBFullAccessChangedNotification）
- (void)refresh;

/// 若未开启，则在传入视图上展示引导弹层（使用现有的 KBFullAccessGuideView）；返回是否已开启
- (BOOL)ensureFullAccessOrGuideInView:(UIView *)parent;

@end

NS_ASSUME_NONNULL_END

