//
//  LMPlatform.h
//  LemonSDK
//
//  Created by Mac on 13-7-31.
//  Copyright (c) 2013年 Syt. All rights reserved.
//

#import <Foundation/Foundation.h>

#import "LMDelegate.h"

@protocol LMPurchaseDelegate;

@interface LMPlatform : NSObject
{
    NSString * _mob_key;
    NSString * _payExt;
}

/**
 @abstract LemonDelegagte
 */
@property (nonatomic,assign) id<LMDelegate> lmdelegate;

/**
 @abstract 快速登录及联合登陆接口加密Key
 */
@property (nonatomic,retain) NSString *     mob_key;

/**
 @abstract 支付扩展参数
 */
@property (nonatomic,retain) NSString *     payExt;

+ (LMPlatform *)sharedInstance;

/*!
 @abstract 初始化SDK，相关参数请于平台接入人联系
 
 @param location       游戏区域码
 @param productID      游戏平台ID
 @param gameCode       游戏代码,一般按照游戏_地区_支付渠道划分
 @param debugState     是否开启debug模式，发布产品时请设置为NO
 @param user_lang      游戏语言 zh-tw2 繁体  zh-cn 简体  en 英文
 
 @return 返回值为空
 
 @discussion 1.注意改接口提供了一个回调方法，用于判断出时候是否成功 
             2.目前SDK测试环境未开放，联调请在正式环境下进行，即debugState ＝ NO
 */

- (void)init:(NSString*)location productID:(NSString*)productID gameCode:(NSString*)gameCode debug:(BOOL)debugState user_lang:(NSString *)user_lang;


#pragma mark - Normal Interfaces

/*!
 @abstract 用于获取是否为SDK测试环境
 
 @return 返回是否为Debug模式，YES：是 NO：不是
 */
- (BOOL)isDebug;

/*!
 @abstract平台登录接口
 
 @param username 平台用户名
 @param password 平台用户密码
 
 @return 返回值为空
 
 @discussion 平台登录接口提供了loginCallBack回调方法，登录的结果会在该回调方法中返回
 */
- (void)login:(NSString*)username password:(NSString*)password;

/*!
 @abstract 平台注册接口
 
 @param username  将要注册账号的用户名
 @param password  将要注册账号的用户密码
 @param email     将要注册账号的用户邮箱
 
 @return 返回值为空
 
 @discussion 平台注册接口提供了registCallBack回调方法，注册的结果会在该回调方法中返回
 */
- (void)regist:(NSString*)username password:(NSString*)password email:(NSString *)email;

/*!
 @abstract 平台快速登录接口
 
 @param mobID 用户色设备标识（必须唯一）
 
 @return 返回值为空
 
 @discussion 1.快速登录接口使用的是用户的设备ID（可以理解为设备的唯一标记 MAC IDFA等）
             2.平台快速登录接口提供了autoRegistCallBack回调方法，快速登录的结果会在该回调方法中返回
 */
- (void)autoRegist:(NSString *)mobID;

/*!
 @abstract 平台联合登陆接口
 
 @param authorizedID   联合登陆的用户ID（例如：qq用户的授权ID、sina用户的授权ID等）
 @param expandMark     联合登陆的渠道（例如：qq、sina、facebook、google、twitter等，请与平台协商）
 @param mask           开启活动指示器遮罩层
 
 @return 返回值为空
 
 @discussion 1.联合登陆接口实现方式是合作方提供的用户ID在平台注册登录
             2.平台联合登陆接口提供了autoRegistCallBack回调方法，联合登陆的结果会在该回调方法中返回
 */
-(void)authorizeRegist:(NSString *)authorizedID expandMark:(NSString *)expandMark;

/*!
 @abstract 刷新平台登录后获得的token
 
 @return 返回值为空
 
 @discussion 注意：该接口目前暂不提供对外使用
 */
- (void)autoRegistForRefreshTokenWithMobID:(NSString *)mobid expandmark:(NSString *)expandMark;

/*!
 @abstract  游戏登录前，展示logo动画接口
 
 @return 返回值为空
 
 @discussion
 */
- (void)showLogoVideo;

/*!
 @abstract  注销平台账号接口
 
 @return 返回值为空
 
 @discussion
 */
- (void)cancellationOfTheCurrentAccount;


/*!
 @abstract  SDK快速登录系统接口
 
 @return 返回值为空
 
 @discussion 1.SDK登录系统接口提供了loginPopupCallBack回调方法，该回调方法中返回了用户登录后的相关信息
 */
- (void)lemonQuickLogin;

- (void)inspectMsgCodeSendRequest:(NSString *)imageCode msgCode:(NSString *)msgCode mobie:(NSString *)mobie;

#pragma mark - evaluateApp
- (void)evaluateAppWithAppID;

#pragma mark - UI Interface

/*!
 @abstract  SDK登录系统接口，提供UI登录界面
 
 @param  isOverseas 是否为海外运营游戏
 
 @return 返回值为空
 
 @discussion 1.SDK登录系统接口提供了loginPopupCallBack回调方法，该回调方法中返回了用户登录后的相关信息
 */
- (void)lemonLoginSystem:(BOOL)isOverseas;

/*!
 @abstract  平台用户中心接口，调用该接口会弹出一个用户中心的view
 
 @param  serverID 服务器Id,为了方便以后支付和提问时给用户自动显示服务器
 @param  roleID   角色ID（可根据不同的游戏，商议解决）
 @param  payext   除serverid和productid以外其他所有参数，请按照字符串拼接的方式做成一个字符串赋值给payext，加元宝回调接口会将此参数保持原样回传游戏服
 
 @return 返回值为空
 
 @discussion 
 */
- (void)webUserCenter:(int)serverID roleID:(NSString *)roleID payExt:(NSString *)payext;

/*!
 @abstract 展示忘记密码view接口
 
 @return 返回值为空
 */
-(void)showFindPasswordView;



/*!
 @abstract 展示SDK协议 view接口
 
 @param isHorizontal 横竖屏选项，NO表示竖，YES表示横
 
 @return 返回值为空
 */
- (void)showLemonProtocolView:(BOOL)isHorizontal;


/*!
 @abstract 展示悬浮用户中心view接口
 
 @param serverID 服务器Id,为了方便以后支付和提问时给用户自动显示服务器
 @param roleID   角色ID（可根据不同的游戏，商议解决
 @param payext   除serverid和productid以外其他所有参数，请按照字符串拼接的方式做成一个字符串赋值给payext，加元宝回调接口会将此参数保持原样回传游戏服
 
 @return 返回值为空
 */
- (void)showLemonCircleView:(int)serverID roleID:(NSString *)roleID payExt:(NSString *)payext;

/*!
 @abstract 移除悬浮用户中心view接口
 
 @return 返回值为空
 */
- (void)moveLemonCircleView;

/*!
 @abstract 上传图片接口
 
 @return 返回值为空
*/
-(void)imageUploadWithImagePath:(NSString *)imagePath imageName:(NSString *)imageName;

/*!
 @abstract 用户中心接口
 
 @return 返回值为空
 */
- (void)showWebUserCenterView;

/**
 appsflyer记录事件
 
 @param eventName 是一个任意的字符串，代表事件名称
 @param values 是一个包含该事件所有可能值的字典类型 (NSDictionary*)
 */
- (void)appsFlyerTrackEvent:(NSString *)eventName withValues:(NSDictionary*)values;

#pragma mark - Facebook Authorize

/*!
 @abstract Facebook SDK授权接口
 
 @return 返回值为空
 */
-(void)facebookAuthoWithViewController:(UIViewController *)vc isSDK:(BOOL)isSDK;


#pragma mark - Google+ Authorize
/*!
 @abstract Google＋ API授权接口
 
 @return 返回值为空
 */
- (void)googleAuthoWithServerAPI;


#pragma mark - Application Life Cycle
/*!
 @abstract SDK获取游戏运行开始接口
 
 @return 返回值为空
 */
- (void)lemonSDKCatchApplication:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;

/*!
 @abstract SDK获取游戏从后台进入前台接口
 
 @return 返回值为空
 */
- (void)lemonSDKCatchapplicationDidBecomeActive;

/*!
 @abstract SDK获取游戏进入后台接口
 
 @return 返回值为空
 */
- (void)lemonSDKCatchApplicationDidEnterBackground;

/*!
 @abstract SDK获取游戏被重新激活接口
 
 @return 返回值为空
 */
- (void)lemonSDKCatchApplicationWillEnterForeground;

/*!
 @abstract SDK获取游戏完全退出接口
 
 @return 返回值为空
 */
- (void)lemonSDKCatchApplicationWillTerminate;

/*!
 @abstract SDK获取游戏从其他应用程序打开接口
 
 @return 返回值为空
 */
- (BOOL)lemonSDKCatchHandleOpenUrl:(NSURL *)url application:(UIApplication *)application sourceApplication:(NSString *)sourceApplication annotation:(id)annotation;

- (BOOL)lemonSDKCatchApplication:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options;

#pragma mark - 充值接口
/*!
 @abstract IAP支付接口
 
 @param serverID  充值服务器的ID
 @param item      苹果上架（游戏内）商品ID
 @param payExt    除serverid和productid以外其他所有参数，请按照字符串拼接的方式做成一个字符串赋值给payext，加元宝回调接口会将此参数保持原样回传游戏服
 @param withMask  是否添加遮罩层支付等待提示
 
 @return 返回值为空
 
 @discussion 1.
 */
- (void)iapPurchase:(int)serverID purchaseItem:(NSString *)item payExt:(NSString *)payExt withMask:(BOOL)withMask;

@end

