//
//

#define SDK_OVERSEAS_VERSION @"2.0.4.6"
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import "REDeRoleInfo.h"
#import "REDeOrderInfo.h"
#import "REDeLoginKit.h"
#import "REDeDelegate.h"
#import "UIColotStyleConfig.h"
#ifdef SINGULAR
#import <Singular/Singular.h>
#endif//singular

@interface REDeLoginKit : NSObject

#pragma mark - init
// 初始化 设置产品,最先需要调用的接口(必接)
+ (void)initSDKWithProductCode:(NSString *)productCode callback:(id<REDeInitCallback>)initDelegate;
/** 初始化 设置产品,最先需要调用的接口(必接) 与初始化不带设置默认语言二选一
 *@param productCode sdk参数从后台获取
 *@param language  sdk显示语言，（简体中文@"zh-CN"或“zh_Hans”, 中文繁体@"zh-hk" 或"zh-Hant", 德语@"de", 英语@"en-us", 法语@"fr", 日语@"ja", 韩语@"ko“, 俄语@"ru", 泰语@"th", 印尼语@"id"，越南语@"vi"，土耳其语@"tr",，阿拉伯语@"ar"，）
 *@param initDelegate 初始化回调接收对象
 */
+ (void)initSDKWithProductCode:(NSString *)productCode language:(NSString *)language callback:(id<REDeInitCallback>)initDelegate;
// 是否已经初始化成功了
+ (BOOL)isInitialized;
// 设置登录回调监听对象(必接)
+ (void)setFunctionLoginCallback:(id<REDeLoginCallback>)loginDelegate;
// 设置支付回调监听对象(必接)
+ (void)setFunctionBuyCallback:(id<REDeBuyCallback>)buyDelegate;
#pragma mark - 用户服务
/** 获取是否存在上次登录账号信息  YES：存在， NO：不存在 */
+ (BOOL)checkLoginValid;
/**进入用户登录页面。收到切换用户通知或者主动注销用户后调用(必接)
@method    isShowMenu      YES:登录自动显示浮标   NO：登录不自动显示浮标
*/
+ (void)loginWithMenuShow:(BOOL)isShowMenu;
// 自动注册和自动登录流程,玩家首次游戏无需注册,达到快速游戏的目的,适合于没有登录按键的游戏在启动后调用
+ (void)fastlyStartGame;
// 主动调用除账密登录外的其他方式登录，无SDK登录界面
+ (void)loginAccountType:(USERCENTER_TYPE)type;
// 主动调用绑定账号
+ (void)bindAccountType:(USERCENTER_TYPE)type;
// 主动调用解绑三方账号
+ (void)unbindAccount:(USERCENTER_TYPE)type;
//获取渠道绑定信息
+ (NSDictionary *)getUserBindInfo;
// 购买接口(必接)
+ (void)IAPWithParameter:(REDeOrderInfo *)param;
// 获取已购买的非消耗商品或者订阅商品,商品信息通过回调返回(通常游戏自己也能获取到这些商品信息，支持购买自动订阅商品或者非消耗商品时选接)
+ (void)restoreNonConsumptionProducts:(id<REDeRestoreCallback>)restoreDelegate;
//根据传入的商品id列表获取商品信息，结果通过回调返回
+ (void)findProductInfoWithProductIds:(NSArray *)productArr delegate:(id<REProductInfoCallback>)productDelegate;
//@method    logout 退出登录。
+ (void)logout;

// 显示，重新显示浮动菜单
+ (void)showMenu:(TopMenuButtonPosition)position;
/** 显示浮标，isLeft 浮标是否居左 originalY 浮标纵向位置起始点 */
+ (void)showFloatButtonIsLeft:(BOOL)isLeft buttonOriginalY:(CGFloat)originalY;
// 隐藏浮动菜单
+ (void)dismissMenu;
// 进入用户中心
+ (void)enterUserCenter;
/** 设置销毁账户提示文案，不设置将使用默认文案 */
+ (void)configAccountDeletionTipContent:(NSString *)tipContent;
/** 删除账户，需要用户确认 */
+ (void)accountDeletion;
/** 直接删除账户，不需要用户确认 */
+ (void)accountDeletionWithoutConfirm;
/** 设置个人中心界面是否显示删除账号入口，默认显示YES */
+ (void)setNeedShowAccountDeletionInUserCenter:(BOOL)show;
/**
 @method    userID
 @rerurn 返回用户id。如未登录，返回空。
 //通常在登录成功回调中调用
 */
+ (NSString *)userID;
// 获取用户登录账号。如未登录，返回空。
+ (NSString *)getUserAccount;
// 用户校验码，用于到服务器端验证用户真实性。
+ (NSString *)getUserToken;
// 判断是否是新用户,YES为新用户，NO为已经注册过的用户
+ (BOOL)isNewUser;
//设置角色信息 选择角色进入游戏时需要设置 必接
+ (void)setGameRoleInfo:(REDeRoleInfo *)roleInfo;
//应用OpenUrl回调 必接
+ (void)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary *)options;
+ (void)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)source annotation:(id)annotation;
// 用户是否是游客,请先判断用户是否有登录
+ (BOOL)isUserGuest;
// 绑定第3方账号页面
+ (void)bandAccount;
/**
 @method    u_stpping
 @rerurn 返回0表示可以进入，1表示不能进入。
 //通常在登录成功回调中调用
 */
+ (BOOL)userStopping;
// 获取设备ID
+ (NSString *)getDeviceID;
// 获取渠道号
+ (NSString *)channelCode;
// 获取国家码
+ (NSDictionary *)getNationCode;
/** 是否启用游客绑定提示 YES:禁用 NO启用 默认NO  */
+ (void)guestBingTipDisable:(BOOL)yesOrNo;
/** 设置是否自动登录，默认自动登录YES*/
+ (void)setNeedAutoLogin:(BOOL)autoLogin;
/** 设置个人中心界面是否显示uid，默认不显示NO*/
+ (void)setNeedShowUid:(BOOL)show;

@end
