//
//  LTUnion.h
//  UnionSDK
//
//  Created by syt on 15/3/20.
//  Copyright (c) 2015年 syt. All rights reserved.
//

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

@class LTEntity;
@class LTProduct;
@class LTRoleInfo;
@protocol LTUnionDelegate;

typedef enum {
    userLogin,                    //用户登录
    userCreateRole,               //用户创建角色
    userPay,                      //用户支付
}LTEventType;                     //事件上报类型

typedef enum{
    gameUpdate,                     //热更
    gameLoading,                      //加载资源
}LTAdpicturetype;

@interface LTUnion : NSObject<UIAlertViewDelegate>

@property(nonatomic,assign) id<LTUnionDelegate> delegate;       //回调代理
@property(nonatomic,retain) NSString *          gameID;         //统一SDK接入分配的游戏ID  例如：510016
@property(nonatomic,retain) NSString *          channelID;      //统一SDK接入分配的渠道ID  例如：1061
@property(nonatomic,retain) NSString *          serverVersion;  //服务器返回的客户端版本号配置（注：统一SDK初始化完成之后方可获取）
@property(nonatomic,retain) NSString *          clientVersion;  //客户端配置的版本号
@property(nonatomic,retain) NSString *          gameDownloadURL;//客户端更新地址，由统一后台配置，返回给客户端

@property(nonatomic,retain) NSString *          channelToken;   //联运渠道登陆的token（注：该token为联运渠道的token，研发验证登陆的时候请使用统一平台返回的token）

@property(nonatomic,retain) LTEntity *          userEntity;     //统一平台返回的用户实体对象
@property(nonatomic,retain) LTProduct *         product;        //正在购买的商品对象
@property(nonatomic,retain) NSDictionary *      adverDict;      //展示广告数据源
//获取单例操作对象
+ (LTUnion *)sharedInstance;

//统一SDK初始化接口
- (void)LTUnionSDKInit;

//统一SDK登陆系统接口
- (void)LTUnionSDKShowLoginView;

//统一SDK显示用户中心接口
- (void)LTUnionSDKShowUserCenter;

//获取角色信息
- (void)LTUnionSDKSendRoleInfo:(LTRoleInfo *)roleInfo;

//现实悬浮按钮接口（说明悬浮按钮展示用户中心各个联运渠道）
- (void)LTUnionSDKShowToolBar;

//统一SDK快速登录接口
- (void)LTUnionSDKQuickLogin;

//隐藏悬浮按钮接口
- (void)LTUnionSDKHiddenToolBar;

//支付接口
- (void)LTUnionSDKPay:(LTProduct *)ltProduct;

//统一SDK注销接口
- (void)LTUnionSDKLogout;

//事件统计接口
-(void) LTUnionSDKEventReport:(NSString *)eventType andExtension:(NSString *)extension;

//展示广告接口
- (void)LTUnionSDKDisplayAdvertise:(LTAdpicturetype)adType;

//关闭广告接口
- (void)LTUnionSDKCloseAdvertise;

//展示用户中心接口
- (void)LTShowWebUserCenterView;

/**
 appsflyer记录事件
 
 @param eventName 是一个任意的字符串，代表事件名称
 @param values 是一个包含该事件所有可能值的字典类型 (NSDictionary*)
 例:记录等级
 [[AppsFlyerTracker sharedTracker] trackEvent: AFEventLevelAchieved withValues:@{
 AFEventParamLevel: @9];
 
 这段代码将创建一个”af_level_achieved”事件，对应事件的值为：
 
 {af_level: 9}
 
 完成新手引导:
 [[AppsFlyerTracker sharedTracker] trackEvent: AFEventTutorial_completion withValues:@{
 AFEventParamTutorialId: key];
 
 */
- (void)LTUnionSDKAppsFlyerTrackEvent:(NSString *)eventName withValues:(NSDictionary*)values;

/*
 *应用程序生命周期接口
 */

//应用程序启动
- (BOOL)LTUnionSDKApplication:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;

//应用程序激活
- (void)LTUnionSDKApplicationDidBecomeActive:(UIApplication *)application;

//应用程序从后台激活
- (void)LTUnionSDKApplicationWillEnterForeground:(UIApplication *)application;

//应用程序进入后台
- (void)LTUnionSDKapplicationDidEnterBackground:(UIApplication *)application;

//应用程序被其他APP唤起
- (BOOL)LTUnionSDKApplication:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation;

//应用程序被其他APP唤起 iOS9
- (BOOL)LTUnionSDKApplication:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options;

- (NSUInteger) LTUnionSDKapplication:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window;

/*
 *以下三个接口各个联运渠道不一致，有的有改功能，有的没有，为了统一都加上，可调用，但是在没有该功能的渠道中，该接口无效
 */

//游客绑定接口
- (void)LTUnionSDKBind;

//展示论坛界面接口
- (void)LTUnionSDKShowAppBBS;

//切换账号接口
- (void)LTUnionSDKSwitchAccount;
@end


@protocol LTUnionDelegate <NSObject>
/*
 *说明  code为返回的状态码  code＝100表示成功   其他为失败  如果要提示用户的话，直接使用回调接口中的msg即可
 */

//统一SDK初始化回调
- (void)LTUnionSDKInitCallBack:(int)code message:(NSString *)msg;

//统一SDK登陆回调
- (void)LTUnionSDKLoginCallBack:(int)code message:(NSString *)msg entity:(LTEntity *)entity;

//统一SDK支付回调
- (void)LTUnionSDKPayCallBack:(int)code message:(NSString *)msg;

//统一SDK注销
- (void)LTUnionSDKLogoutCallBack:(int)code message:(NSString *)msg;

@end

#pragma mark - LTEntity User Model
/*
 *LTEntity为用户实体类，登陆成功之后会回调一个用户实体对象给游戏客户端，客户端拿到该用户实体对象的时候，可以用该对象封装的属性参数去进行统一后台进行登陆验证
 */
@interface LTEntity : NSObject
//用户ID
@property(nonatomic,retain) NSString * userID;
//统一后台返回的token
@property(nonatomic,retain) NSString * token;
- (NSString *)description;
@end
