#ifndef __PLATFORM_INTERFACE_H
#define __PLATFORM_INTERFACE_H

#include <string>
using namespace std;

class CPlatformInterface
{
public:
	CPlatformInterface(void);
	~CPlatformInterface(void){};

    //----------------------需要处理的回调接口-------------------------
    /**
     *sdk初始化成功回调
     */
    static void initSdkCallback();
    
    /**
     *登录成功回调
     *username:渠道uid
     *userID:平台uid
     *sessionID:时间戳
     *token:平台验证用的token
     *datadict:扩展返回参数,登录验证后平台服务器返回的所有数据
     */
    static void LoginSuccess(const char * username, const char * userID, const char * sessionID, const char * token, const char * datadict);
    
    /**
     *切换账号回调
     *参数同登录成功回调
     */
    static void SwichAccount(const char * username, const char * userID, const char * sessionID, const char * token, const char * datadict);
    
    /**
     *登陆失败回调
     *code值,失败时为0,取消时为1
     */
    static void LoginCancel(int code);
  
    /**
     *注册或游客登录成功回调
     */
    static void RegisterCloseCallback();
    
    /**
     *funcell订单查询回调,接入服务器通知订单完成的不用管
     */
    static void payCallback(const char *billNo, const char *accessToken);
    
    /**
     *渠道支付成功回调
     *billNo
     平台订单号
     *extData
     调用支付传入的附加字符串,透传参数
     */
    static void PaySuccessCallBack(const char *billNo, const char *extData);
    
    /**
     *渠道支付失败回调
     *information
     回调通知信息
     */
    static void PayFailCallBack(const char *information);
    
    /**
     *渠道支付取消回调
     *information
     回调通知信息
     */
    static void PayCancelCallBack(const char *information);
    
    /**
     *渠道回调支付关闭界面,网络请求失败,未知错误等
     *information
     回调通知信息
     */
    static void PayClosePayPage(const char *information);
    
    /**
     *sdk通知游戏退出登录
     */
    static void PlatformToGameLogout();
    
    /**
     *获取充值列表回调
     */
    static void getPayListCallback(const char *payListResult);
    /**
     *获取服务器列表回调
     */
    static void getServerListCallback(const char* serverlist);

    /**
     *获取公告列表回调
     */
    static void getNoticeListCallback(const char* noticelist);
    
    /**
     *游戏中心页面关闭
     */
    static void GameCenterCloseCallback();
    
    /**
     *分享结果反馈
     *sharetype
     传入的分享类型
     *state
     分享状态,成功:@"success"，失败:@"fail"，取消:@"cancel"
     *result
     分享返回的内容
     */
    static void ShareResult(const char* sharetype, const char* state, const char* result);
    
	//----------------------C 调用的接口-------------------------
    /**
     *登陆
     */
	static void Login();

    /**
     *支付
     */
	static void Pay( string itemid, string itemName, string type,int num ,float money, string currency = "RMB", string extData = "", string paysdktype = "appstore");	//物品id，物品名字，充值类型值，及购买的数量: int num 表示购买物品的数量值,float money 代表购买物品的总金额，单位是元; extData是一个json串, 用于赠送给其它玩家使用,充值sdk接口类型:paysdktype("appstore"表示app支付,"joycell"表示funcell支付)

    /**
     *获取支付列表,回调返回当前支持的支付列表ＪＳＯＮ串
     */
	static void GetPayList();

    /**
     *获取未完成订单,接入服务器通知订单完成的不用管
     */
	static void getOrderList();
    
    /**
     *游戏处理完充值订单后反馈平台,接入服务器通知订单完成的不用管
     */
    static void payFeedback(const string billNo);
    
    /**
     *获取哦服务器列表
     *whitekey
     白名单标识,可以不传
     */
    static void getServerList(string whitekey = "");
    
    /**
     *获取公告列表
     *type
     公告类型,参考文档
     serverid
     区服id,可以不传
     */
    static void getNoticeList(string type, string serverid = "");

    /**
     *游戏通知平台退出登录
     */
	static void GameToPlatformLogout();	 //由游戏层调用来的退出ＳＤＫ的登录账号的注销操作

    /**
     *设置区号areaID和区名areeaName
     */
	static void SetAreaInfo(string areaID, string areaName);

    /**
     *设置角色信息
     *rolename:角色名
     *roleid:角色id
     *rolelevel:角色等级
     *profession:职业
     *power:战力
     *gold:财富
     */
	static void SetRoleInfo(string roleName, string roleID, int rolelevel = -1, string Profession = "profession", int Power = 1, int Gold = 1);

    /**
     *获取平台编号
     */
	static int GetPlatformID();

    /**
     *获取平台名字
     */
	static string GetPlatformName();

    /**
     *获取发现服返回结果
     */
    static string getEveData();
    
    /**
     *获取AccessToken
     */
    static string getAccessToken();
    
    /**
     *获取游戏的clientid
     */
    static string getClientId();
    
    //------------------提供SDK通用接口------------
    /**
     * 提供SDK通用接口
     * pluginType : 调用的插件类型，如：语音"voice", 分享"share", 与funcellplugin.plist中的typePlugin一致。如果需调用FuncellChannel中的接口，pluginType传入参"channel"
     * sdkType : 对应pluginType下的具体第三方sdk，比如：语音的第三方游密传参"youme", 分享第三方facebook传参 "facebook" 等，与funcellplugin.plist中的channel一致. 如果传入all，则可以执行pluginType下的所有第三方sdk。如果pluginType为"channel", sdkType则需要传入”funcellchannel“
     * function : 需要执行的 OC 方法名，字符串形式
     *   values : 该方法名需要的参数，以json字符串形式传入, 如果无参数就传入空
     *    返回值 : 返回json字符串，key为sdkType，value为对应的返回值，如果为空（没有任何key值）则方法返回为空
     */
    static string CallFunction(string pluginType, string sdkType, string function, string values);
};

#endif


