//
//  KGKakaoProfile.h
//  KakaoGame SDK
//
//  Created by Ronaldo Kim on 2016. 9. 19..
//  Copyright (c) 2016. Kakao Corp. All rights reserved.
//

#import <UIKit/UIKit.h>
#import <KakaoGame/KGIdpProfile.h>

/**
 * @brief OS 구분을 위한 Enum.
 */
typedef NS_ENUM(NSInteger, KGOSType)
{
    KGOSTypeUnknown,    /**< 모름. */
    KGOSTypeAndroid,    /**< Android. */
    KGOSTypeIOS,        /**< iOS. */
};

/**
 * @brief KGKakaoProfile클래스는 카카오 프로필 정보를 다룬다.
 */
@interface KGKakaoProfile : KGIdpProfile

/**
 * @brief 카카오 프로필 UUID.(읽기만 가능)
 */
@property (atomic, readonly)                            NSString    *uuid;

/**
 * @brief 카카오 프로필 별명.(읽기만 가능)
 */
@property (atomic, readonly)                            NSString    *nickname;

/**
 * @brief 카카오 서비스유저ID. (읽기만 가능)
 */
@property (atomic, readonly)                            NSNumber    *serviceUserId;

/**
 * @brief 카카오 썸네일 이미지 URL.(읽기만 가능)
 */
@property (atomic, readonly)                            NSString    *thumbnailImageUrl;

/**
 * @brief 카카오 프로필 이미지 URL.(읽기만 가능)
 */
@property (atomic, readonly)                            NSString    *profileImageUrl;

/**
 * @brief 앱 가입 여부.(읽기만 가능)
 */
@property (atomic, readonly, getter=isAppRegistered)    BOOL        appRegistered;

/**
 * @brief 메시지 수신 여부.(읽기만 가능)
 */
@property (atomic, readonly, getter=isAllowedMessage)   BOOL        allowedMessage;

/**
 * @brief 카카오 톡이 설치된 OS.(읽기만 가능)
 */
@property (atomic, readonly)                            KGOSType    kakaoTalkOS;

/**
 * @brief 오늘 보낼 수 있는 남은 초대 수.(읽기만 가능)
 */
@property (atomic, readonly)                            int         remainingInviteCount;

/**
 * @brief 오늘 보낼 수 있는 남은 그룹 메시지 수.(읽기만 가능)
 */
@property (atomic, readonly)                            int         remainingGroupMessageCount;

/**
 * @brief 추천 친구 여부(읽기만 가능)
 */
@property (atomic, readonly, getter=isRecommended)		BOOL 		recommended;

/**
 * @brief 유저의 CI값(읽기만 가능)
 */
@property (atomic, readonly)                            NSString    *ci;

/**
 * @brief 유저의 memberKey값(읽기만 가능)
 */
@property (atomic, readonly)							NSString 	*memberKey;

/**
 * @brief 유저의 impressionId값(읽기만 가능)
 */
@property (atomic, readonly)							NSString 	*impressionId;

/**
 * @brief 탈퇴 여부(읽기만 가능)
 */
@property (atomic, readonly, getter=isUnregistered)		BOOL 		unregistered;

/**
 * @brief KakaoTalk 가입자인지 여부
 *
 * @param completionHandler 완료 핸들러 [error: 조회 결과][isTalkUser: 톡 유저인지 여부]
 */
+ (void)checkTalkUserWithCompletionHandler:(void(^)(NSError* error, BOOL isTalkUser))completionHandler;

/**
 * @brief 현재 앱을 플레이한 적이 없는 카카오 친구들의 프로필 정보 목록(초대에 응할 가능성이 높은 순으로 정렬된 목록)을 조회한다.
 *
 * @param recommendLimit 최대 추천 친구 수.
 * @param offset 조회할 오프셋. 0부터 시작.
 * @param limit 한번에 가져올 최대 갯수.
 * @param completionHandler 완료 핸들러 [error:조회 결과][totalCount:플레이한 적이 없는 IDP 친구 수][kakaoProfiles:프로필 정보(KGKakaoProfile) 목록].
 */
+ (void)loadInvitableFriendProfilesWithRecommendLimit:(int)recommendLimit
											   offset:(int)offset
												limit:(int)limit
									completionHandler:(void(^)(NSError *error, int totalCount, NSArray *kakaoProfiles))completionHandler;

/**
 * @brief 본인인증 요청을 시도한다.
 *
 * @param completionHandler 완료 핸들러 [error:조회 결과].
 */
+ (void)requestAgeVerificationWithCompletionHandler:(void(^)(NSError* error))completionHandler;

#pragma mark - Deprecated API
/**
 * @deprecated
 */
+ (void)loadInvitableFriendProfilesWithOffset:(int)offset
										limit:(int)limit
							completionHandler:(void(^)(NSError *error, int totalCount, NSArray *kakaoProfiles))completionHandler DEPRECATED_ATTRIBUTE;

/**
 * @deprecated
 */
+ (void)loadRecommendedInvitableFriendProfilesWithOffset:(int)offset
												   limit:(int)limit
									   completionHandler:(void(^)(NSError *error, int totalCount, NSArray *kakaoProfiles))completionHandler DEPRECATED_ATTRIBUTE;

@end
