//
//  UMComPlatformProviderManager.h
//  UMSocialSDK
//
//  Created by 张军华 on 16/8/5.
//  Copyright © 2016年 dongjianxiong. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "UMSocialPlatformProvider.h"
#import "UMSocialGlobal.h"
@class UMSocialMessageObject;
@interface UMSocialManager : NSObject

+(instancetype)defaultManager;

/**
 返回当前有效(安装并是可用的)平台列表
 */
@property(nonatomic,readonly,strong) NSArray * platformTypeArray;


/**
 *  打开日志
 *
 *  @param isOpen YES代表打开，No代表关闭
 */
-(void) openLog:(BOOL)isOpen;

/**
 *  设置平台的appkey
 *
 *  @param platformType 平台类型 @see UMSocialPlatformType
 *  @param appKey       第三方平台的appKey（QQ平台为appID）
 *  @param appSecret    第三方平台的appSecret（QQ平台为appKey）
 *  @param redirectURL  redirectURL
 */
- (BOOL)setPlaform:(UMSocialPlatformType)platformType
            appKey:(NSString *)appKey
         appSecret:(NSString *)appSecret
       redirectURL:(NSString *)redirectURL;


/**
 *  设置分享平台
 *
 *  @param platformType  平台类型 @see UMSocialPlatformType
 *  @param messageObject  分享的content @see UMSocialMessageObject
 *  @param currentViewController 用于弹出类似邮件分享、短信分享等这样的系统页面
 *  @param completion   回调
 *  @discuss currentViewController 只正对sms,email等平台需要传入viewcontroller的平台，其他不需要的平台可以传入nil
 */
- (void)shareToPlatform:(UMSocialPlatformType)platformType
          messageObject:(UMSocialMessageObject *)messageObject
  currentViewController:(id)currentViewController
             completion:(UMSocialRequestCompletionHandler)completion;

/**
 *  取消授权
 *
 *  @param platformType 平台类型 @see UMSocialPlatformType
 *  @param completion   回调
 */
- (void)cancelAuthWithPlatform:(UMSocialPlatformType)platformType
                    completion:(UMSocialRequestCompletionHandler)completion;

/**
 *  授权并获取用户信息
 *  @param platformType 平台类型 @see UMSocialPlatformType
 *  @param currentViewController 用于弹出类似邮件分享、短信分享等这样的系统页面
 *  @param completion   回调
 */
- (void)getUserInfoWithPlatform:(UMSocialPlatformType)platformType
          currentViewController:(id)currentViewController
                     completion:(UMSocialRequestCompletionHandler)completion;

/**
 *  获得从sso或者web端回调到本app的回调
 *
 *  @param url 第三方sdk的打开本app的回调的url
 *
 *  @return 是否处理  YES代表处理成功，NO代表不处理
 */
-(BOOL)handleOpenURL:(NSURL *)url;

/**
 *  获得从sso或者web端回调到本app的回调
 *
 *  @param url               第三方sdk的打开本app的回调的url
 *  @param sourceApplication 回调的源程序
 *  @param annotation        annotation
 *
 *  @return 是否处理  YES代表处理成功，NO代表不处理
 *  
 *  @note 此函数在6.3版本加入
 */
-(BOOL)handleOpenURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation;

/**
 *  获得从sso或者web端回调到本app的回调
 *
 *  @param url     第三方sdk的打开本app的回调的url
 *  @param options 回调的参数
 *
 *  @return 是否处理  YES代表处理成功，NO代表不处理
 *
 *  @note 此函数在6.3版本加入
 */
-(BOOL)handleOpenURL:(NSURL *)url options:(NSDictionary*)options;


/**
 *  动态的增加用户自定义的PlatformProvider
 *
 *  @param userDefinePlatformProvider 用户自定义的userDefinePlatformProvider必须实现UMSocialPlatformProvider
 *  @param platformType               平台类型 @see platformType platformType的有效范围在 （UMSocialPlatformType_UserDefine_Begin,UMSocialPlatformType_UserDefine_End)之间
 *
 *  @return YES代表返回成功,NO代表失败
 *  @disuss 在调用此函数前，必须先设置对应的平台的配置信息 @see - (BOOL)setPlaform:(UMSocialPlatformType)platformType appKey:(NSString *)appKey appSecret:(NSString *)appSecret redirectURL:(NSString *)redirectURL;
 */
-(BOOL)addAddUserDefinePlatformProvider:(id<UMSocialPlatformProvider>)userDefinePlatformProvider
             withUserDefinePlatformType:(UMSocialPlatformType)platformType;


/**
 *  获得对应的平台类型platformType的PlatformProvider
 *
 *  @param platformType 平台类型 @see platformType
 *
 *  @return 返回继承UMSocialPlatformProvider的handle
 */
-(id<UMSocialPlatformProvider>)platformProviderWithPlatformType:(UMSocialPlatformType)platformType;



/**
 *  动态的删除不想显示的平台，不管是预定义还是用户自定义的
 *
 *  @param platformTypeArray 平台类型数组
 */
-(void) removePlatformProviderWithPlatformTypes:(NSArray *)platformTypeArray;

/**
 *  动态的删除PlatformProvider，不管是预定义还是用户自定义的
 *
 *  @param platformType 平台类型 @see UMSocialPlatformType
 */
-(void) removePlatformProviderWithPlatformType:(UMSocialPlatformType)platformType;


/**
 *  平台是否安装
 *
 *  @param platformType 平台类型 @see UMSocialPlatformType
 *
 *  @return YES 代表安装，NO 代表未安装
 *  @note 调用前请检查是否配置好平台相关白名单: http://dev.umeng.com/social/ios/quick-integration#1_3 
 *  在判断QQ空间的App的时候，QQApi判断会出问题
 */
-(BOOL) isInstall:(UMSocialPlatformType)platformType;

/**
 *  当前平台是否支持分享
 *
 *  @param platformType 平台类型 @see UMSocialPlatformType
 *
 *  @return YES代表支持，NO代表不支持
 */
-(BOOL) isSupport:(UMSocialPlatformType)platformType;


#pragma mark - NOT COMMON METHOD
/**
 *  授权平台 (此方法仅获取授权token，不包含获取用户信息。推荐使用上面的 getUserInfoWithPlatform... 接口获取授权及用户信息)
 *
 *  @param platformType  平台类型 @see UMSocialPlatformType
 *  @param currentViewController 用于弹出类似邮件分享、短信分享等这样的系统页面
 *  @discuss currentViewController 只对sms,email等平台需要传入viewcontroller的平台，其他不需要的平台可以传入nil
 *  @param completion   回调
 */
- (void)authWithPlatform:(UMSocialPlatformType)platformType
   currentViewController:(UIViewController *)currentViewController
              completion:(UMSocialRequestCompletionHandler)completion;

@end

