//
//  KGSystem.h
//  KakaoGame SDK
//
//  Created by Bruce Lee on 2017. 2. 14..
//  Copyright (c) 2017. Kakao Corp. All rights reserved.
//

#import <Foundation/Foundation.h>

/**
 * @brief AdConsent 동의 정보 Enum.
 */
typedef NS_ENUM(NSInteger, KGAdConsent)
{
	KGAdConsentNone,							/**< 동의 정보 없음. */
	KGAdConsentEnable,							/**< 동의 */
	KGAdConsentDisable,							/**< 미동의. */
};

/**
 * @brief KGSystem클래스는 시스템에 대한 정보를 제공한다.
 */
@interface KGSystem : NSObject

/**
 * @brief 디바이스 아이디를 반환한다.
 *
 * @return 디바이스 아이디.
 */
+ (NSString*)deviceId;

/**
 * @brief 연결된 네트워크 타입을 반환한다.
 *
 * @return 연결된 네트워크 타입.<br>
 * WIFI 연결되어 있으면 "wifi"를 반환한다.<br>
 * 통신사와 연결되어 있으면 "cellular"를 반환한다.<br>
 * 연결되어 있지 않거나, 해당 정보를 알수 없으면 "unknown"을 반환한다.
 */
+ (NSString*)networkType;

/**
 * @brief 네트워크 연결 상태를 반환한다.
 *
 * @return 네트워크 연결되어 있으면 YES를 반환한다. 아니면 NO를 반환한다.
 */
+ (BOOL)isNetworkConnected;

/**
 * @brief 국가 코드를 반환한다.
 *
 * @return 국가 코드.
 */
+ (NSString*)countryCode;

/**
 * @brief 언어 코드를 반환한다.
 *
 * @return 언어 코드.
 */
+ (NSString*)languageCode;

/**
 * @brief BCP-47 포맷의 언어 태그를 반환한다.
 *
 * @return 언어 태그.
 *
 */
+ (NSString*)languageTag;

/**
 * @brief 디바이스 모델명을 반환한다.
 *
 * @return 디바이스 모델명.
 */
+ (NSString*)deviceModel;

/**
 * @brief OS 이름을 반환한다.
 *
 * @return "ios".
 */
+ (NSString*)osName;

/**
 * @brief 언어코드를 설정한다.
 *
 * @param languageCode 언어코드.
 * @param completionHandler 완료 핸들러 [error:요청 결과].
 */
+ (void)updateLanguageCodeWithCode:(NSString *)languageCode
                 completionHandler:(void(^)(NSError *error))completionHandler;

/**
 * @brief geo ip에 따른 국가코드를 반환한다.
 *
 * @return 국가 코드
 */
+ (NSString *)geoCountryCode;

/**
 * @brief 사용자의 앱스토어에 설정된 국가코드를 반환한다. (iOS 13 이상)
 *
 * @return 사용자의 앱스토어에 설정된 국가코드명.
 */
+ (NSString*)getStoreCountryCode;

/**
 * @brief 유저의 광고 식별자 사용 동의 화면을 노출하여 유저에게 동의를 요청 한다.
 *
 * @param completionHandler 완료 핸들러 [error: 요청 결과].
 */
+ (void)enableAdConsentWithCompletionHandler:(void (^)(NSError *error))completionHandler;

/**
 * @brief 유저의 광고 식별자 사용 동의 여부를 반환 한다.
 *
 * @return 유저의 광고 식별자 사용 동의 여부.
 */
+ (KGAdConsent)adConsentState;

@end
