//
//  KGProtection.h
//  KakaoGame
//
//  Created by eric.j on 2022/02/25.
//

#import <Foundation/Foundation.h>

/**
 * @brief KGProtection클래스는 2차 비밀번호 인증 기능을 제공한다.
 */
@interface KGProtection : NSObject

/**
 * @brief 로그인한 유저가 2차 비밀번호 인증을 위한 이메일을 등록했는지 조회한다.<br>
 *
 * @param completionHandler 완료 핸들러 [error:조회 결과][email: 등록된 이메일이 있을 시 해당 이메일].
 */
+ (void)check2StepVerificationEmailWithCompletionHandler:(void (^)(NSError *error, NSString *email))completionHandler;

/**
 * @brief 로그인한 유저가 2차 비밀번호 인증을 위한 이메일을 등록한다.<br>
 *
 * @param email 등록을 요청할 이메일.
 *
 * @param completionHandler 완료 핸들러 [error:등록 결과].
 */
+ (void)register2StepVerificationEmailWithEmail:(NSString *)email completionHandler:(void (^)(NSError *error))completionHandler;

/**
 * @brief 현재 게임에서 기기 등록 기능이 활성화 상태인지 조회한다.<br>
 *
 * @return 기기 등록 활성화 되어있으면 YES를 리턴한다. 아니면 NO를 리턴한다.
 */
+ (BOOL)isEnableDeviceSecurity;

/**
 * @brief 현재 유저가 기기 등록 서비스에 가입한 상태인지 조회한다.<br>
 *
 * @param completionHandler 완료 핸들러 [error:조회 결과][isRegistered: 현재 기기등록 서비스에 가입한 상태인지 여부].
 */
+ (void)isRegisteredDeviceSecurityWithCompletionHandler:(void (^)(NSError *error, BOOL isRegistered))completionHandler;

/**
 * @brief 현재 유저가 서버에 접근 가능한지 확인한다.<br>
 * 성공인 경우 접속 가능, 실패이면 접속 불가능
 * 기기 등록이 필수이면 인증서 등록된 경우에만 접속 가능
 * 선택인 경우 기 가입자는 인증서를 필수로 등록해야하고, 신규 가입자는 신규 유저 등록 필수 옵션에 따라 등록한다.
 *
 * @param completionHandler 완료 핸들러 [error:조회 결과][accessKey: 유저가 서버에 접속 가능하고, 인증서 검증이 완료된경우 키 값].
 */
+ (void)isAllowedAccessWithCompletionHandler:(void (^)(NSError *error, NSString *accessKey))completionHandler;

/**
 * @brief 기기 등록 과정을 위한 웹뷰를 로딩한다.<br>
 *
 * @param completionHandler 완료 핸들러 [error:조회 결과].
 */
+ (void)showDeviceRegistrationViewWithCompletionHandler:(void (^)(NSError *error))completionHandler;

/**
 * @brief 현재 기기가 유효한 인증서를 가지고 있는지 조회한다.<br>
 *
 * @param completionHandler 완료 핸들러 [error: 조회 결과][isCertificated: 유효한 인증서를 가지고 있는지 여부].
 */
+ (void)isCertificatedDeviceWithCompletionHandler:(void (^)(NSError *error, BOOL isCertificated))completionHandler;

/**
 * @brief 현재 게임에서 2차 비밀번호 기능이 활성화 상태인지 조회한다.<br>
 *
 * @return 2차 비밀번호 기능이 활성화 되어있으면 YES를 리턴한다. 아니면 NO를 리턴한다.
 */
+ (BOOL)isEnable2ndPassword;

/**
 * @brief 현재 유저가 2차 비밀번호 서비스에 가입한 상태인지 조회한다.<br>
 *
 * @param completionHandler 완료 핸들러 [error: 조회 결과][isRegistered: 현재 2차 비밀번호 서비스에 가입한 상태인지 여부].
 */
+ (void)isRegistered2ndPasswordWithCompletionHandler:(void (^)(NSError *error, BOOL isRegistered))completionHandler;

/**
 * @brief 2차 비밀번호를 설정한다.<br>
 *
 * @param completionHandler 완료 핸들러 [error: 조회 결과].
 */
+ (void)register2ndPasswordWithCompletionHandler:(void (^)(NSError *error))completionHandler;

@end
