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

#import <Foundation/Foundation.h>

#import "LMDelegate.h"
#import <KakaoGame/KakaoGame.h>

@protocol LMPurchaseDelegate;

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

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

/*! @abstract 用户是否绑定 */
@property (nonatomic,assign) BOOL           isBind;

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

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

+ (LMPlatform *)sharedInstance;

/*!
 @abstract 初始化SDK，相关参数请于平台接入人联系
 
 @param location       游戏区域码
 @param productID      游戏平台ID
 @param debugState     是否开启debug模式，发布产品时请设置为NO

 @return 返回值为空
 
 @discussion 1.注意改接口提供了一个回调方法，用于判断出时候是否成功 
             2.目前SDK测试环境未开放，联调请在正式环境下进行，即debugState ＝ NO
 */
- (void)init:(NSString*)location productID:(NSString*)productID debug:(BOOL)debugState;

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

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

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


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


#pragma mark - UI Interface

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

/**
 @abstract 用户协议接口，提供协议界面

 @param isHorizontal 是否横竖屏
 */
- (void)showLemonProtocolView:(BOOL)isHorizontal;

- (void)showLemonFirstProtocolView;

/*!
 @abstract 展示动画接口
 
 @param videoPath 动画文件路径
 @param backgroundColor 背景颜色
 @param lmdelegate 设置lmdelegate
 
 @return 返回值为空
 
 @discussion 1.此接口提供了videoFinishCallBack回调方法,播放完毕视频会在该回调方法中返回
 */
- (void)showLogoVideoWithPath:(NSString *)videoPath backgroundColor:(UIColor *)backgroundColor andDelegate:(id<LMDelegate>)lmdelegate;

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



#pragma mark - Kakao Authorize

/**
 kakao 授权登录
 */
- (void)kakaoAuto;

/**
 kakao 帐号登出
 */
- (void)kakaoLogout;

/**
 kakao 无界面登出
 */
- (void)kakaoLogoutWithCustomUI;

/**
 kakao 取消授权
 */
- (void)deleteKakao;

/**
 kakao 获取好友
 */
- (void)kaKaoGetFriend;

/**
 游戏内好友列表
 */
- (void)getGameFriend:(NSString *)userID kakaoFriendID:(NSString *)kakaoFriendID;

/**
 获取kakao可邀请好友
 */
- (void)invitableKakaoFriend __attribute__((deprecated("已废弃,请使用新版邀请kakao好友接口", "invitableKakaoFriend:(NSString *)templateId")));

/// 邀请kakao好友
/// @param templateId kakao后台配置到消息ID
- (void)invitableKakaoFriend:(NSString *)templateId;

/**
 绑定kakao
 */
- (void)bindKakao;

/**
 发送邀请信息

 @param kakaoProfile kakao后台配置的消息
 */
-(void)sendTemplateMessageWithFriendEntity:(KGKakaoProfile *)kakaoProfile;

/**
 获取成功邀请好友数量
 */
-(void)getKakaoInvitationEvent;

/**
 设置消息界面
 */
-(void)showAllowMessageSettingView;

/**
 kakaoMemberKey
 */
- (void)kakaoMemberKey;

/**
 kakao好友信息接口<sdk内部使用>
 */
- (void)getKakaoFriend:(NSString *)uesrID kakaoFriendID:(NSString *)kakaoFriendID;

/**
 注销kakao账号接口<sdk内部使用>
 */
- (void)logoutKaKao:(NSString *)userName;

/**
 删除kakao账号接口
 */
- (void)deleteKaKaoAccount:(NSString *)appleName;

/**
 取消注销kakao账号接口<sdk内部使用>
 */
- (void)cancelLogoutKakao:(NSString *)userName;

/**
 kakao解除用户锁定状态<SDK内部使用>
 */
- (void)kakaoUnchainLockStatusWithUserName:(NSString *)userName;

#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 返回值为空
 */
- (void)lemonSDKCatchApplicationDidRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken;

/*!
 @abstract SDK获取
 
 @return 返回值为空
 */
- (void)lemonSDKCatchApplicationDidReceiveRemoteNotification:(NSDictionary *)userInfo;

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

#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;

/**
 *  获取报酬
 *
 *  @param password 新密码
 *  @param uid      用户uid
 *  @param code     验证码
 */
- (void)sendReward;

- (void)LMFiveRocksUserLevel:(int)level;

- (void)placementWithName:(NSString *)name;

- (void)LMFiveRocksEventCategory:(NSString *)eventCategory andEventName:(NSString *)eventName andEventParameter1:(NSString *)eventParameter1 andEventParameter2:(NSString *)eventParamet;

#pragma mark - GameCenter Authorize
/*!
 @abstract GameCenter授权登录
 
 @return 返回值为空
 */
-(void)gamecenterAutho;

/*!
 @abstract GameCenter上传排行榜积分
 
 @param leaderboardIdentifier 排行榜标识
 
 @param score 当前得分
 
 @return 返回值为空
 */
-(void)gamecenterUploadScoreWithLeaderboardIdentifier:(NSString *)leaderboardIdentifier andScore:(int64_t)score;

/*!
 @abstract GameCenter显示排行榜
 
 @return 返回值为空
 */
-(void)gameCenterShowLeaderboardIdentifier:(NSString *)identifier;

/*!
 @abstract GameCenter上传成就进度
 
 @param leaderboardIdentifier 成就标识
 
 @param score 当前得分
 
 @return 返回值为空
 */
-(void)gameCenterUploadScoreWithAchievementIdentifier:(NSString *)achievementIdentifier andPercentComplete:(double)percentComplete;

/*!
 @abstract GameCenter显示成就
 
 @return 返回值为空
 */
-(void)gameCenterShowAchievement;

/*!
 @abstract eventCategory 分类名字
 
 @param eventName 事件名字
 
 @param eventParameter1 自定义事件
 
 @return 返回值为空
 */

-(void)LMAppsFlyerEventCategory:(NSString *)eventCategory withValues:(NSDictionary*)values;

/**
 *  应用内关闭推送
 */
- (void)lemonSDKClosePush;

/**
 *  应用内开启推送
 */
-(void)lemonSDKOpenPush;

/**
 *  获取系统用户推送状态
 */
-(BOOL)lemonSDKUserPushSetting;

/**
 *  获取用户协议第四个按钮状态
 */
-(BOOL)lemonSDKfourBtnStatus;

@end
