//
//  UMSocialSnsPlatformManager.h
//  SocialSDK
//
//  Created by yeahugo on 13-1-15.
//  Copyright (c) 2013年 Umeng. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "UMSocialControllerService.h"

/**
 新浪微博
 */
extern NSString *const UMShareToSina;

/**
 腾讯微博
 */
extern NSString *const UMShareToTencent;

/**
 人人网
 */
extern NSString *const UMShareToRenren;

/**
 豆瓣
 */
extern NSString *const UMShareToDouban;

/**
 QQ空间
 */
extern NSString *const UMShareToQzone;

/**
 邮箱
 */
extern NSString *const UMShareToEmail;

/**
 短信
 */
extern NSString *const UMShareToSms;

/**
 微信好友
 */
extern NSString *const UMShareToWechatSession;

/**
 微信朋友圈
 */
extern NSString *const UMShareToWechatTimeline;

/**
 微信收藏
 */
extern NSString *const UMShareToWechatFavorite;

/**
 手机QQ
 */
extern NSString *const UMShareToQQ;

/**
 Facebook
 */
extern NSString *const UMShareToFacebook;

/**
 Twitter
 */
extern NSString *const UMShareToTwitter;


/**
 易信好友
 */
extern NSString *const UMShareToYXSession;

/**
 易信朋友圈
 */
extern NSString *const UMShareToYXTimeline;

/**
 来往好友
 */
extern NSString *const UMShareToLWSession;

/**
 来往朋友圈
 */
extern NSString *const UMShareToLWTimeline;

/**
 分享到Instragram
 */
extern NSString *const UMShareToInstagram;

/**
 分享到Whatsapp
 */
extern NSString *const UMShareToWhatsapp;

/**
 分享到Line
 */
extern NSString *const UMShareToLine;

/**
 分享到Tumblr
 */
extern NSString *const UMShareToTumblr;

/**
 分享到Pinterest
 */
extern NSString *const UMShareToPinterest;

/**
 分享到KakaoTalk
 */
extern NSString *const UMShareToKakaoTalk;

/**
 分享到Flickr
 */
extern NSString *const UMShareToFlickr;

/**
 分享平台
 
 */
typedef enum {
    UMSocialSnsTypeNone = 0,
    UMSocialSnsTypeQzone = 10,
    UMSocialSnsTypeSina,                  //sina weibo
    UMSocialSnsTypeTenc,                  //tencent weibo
    UMSocialSnsTypeRenr,                  //renren
    UMSocialSnsTypeDouban,                //douban
    UMSocialSnsTypeWechatSession,
    UMSocialSnsTypeWechatTimeline,
    UMSocialSnsTypeWechatFavorite,
    UMSocialSnsTypeEmail,
    UMSocialSnsTypeSms,
    UMSocialSnsTypeMobileQQ,
    UMSocialSnsTypeFacebook,
    UMSocialSnsTypeTwitter,
    UMSocialSnsTypeYiXinSession,
    UMSocialSnsTypeYiXinTimeline,
    UMSocialSnsTypeLaiWangSession,
    UMSocialSnsTypeLaiWangTimeline,
    UMSocialSnsTypeInstagram,
    UMSocialSnsTypeWhatsApp,
    UMSocialSnsTypeLine,
    UMSocialSnsTypeTumblr,
    UMSocialSnsTypeKakaoTalk,
    UMSocialSnsTypeFlickr,
    UMSocialSnsTypePinterest,
    UMSocialSnsTypeNew
} UMSocialSnsType;


@class UMSocialControllerService;

/** 定义响应点击平台后的block对象
 
 @param presentingController 点击后弹出的分享页面或者授权页面所在的UIViewController对象
 @param socialControllerService 可以用此对象的socialControllerService.socialData可以获取分享内嵌文字、内嵌图片，分享次数等
 @param isPresentInController 如果YES代表弹出(present)到当前UIViewController，否则push到UIViewController的navigationController
 
 */
typedef void (^UMSocialSnsPlatformClickHandler)(UIViewController *presentingController, UMSocialControllerService * socialControllerService, BOOL isPresentInController);

/** 定义响应点击各平台授权登录后的block对象
 
 @param presentingController 点击后弹出的分享页面或者授权页面所在的UIViewController对象
 @param socialControllerService 可以用此对象的socialControllerService.socialData可以获取分享内嵌文字、内嵌图片，分享次数等
 @param isPresentInController 如果YES代表弹出(present)到当前UIViewController，否则push到UIViewController的navigationController
 @param completion 授权完成之后的回调对象，返回的response参数表示成功与否和拿到的授权信息
 
 */
typedef void (^UMSocialSnsPlatformLoginHandler)(UIViewController *presentingController, UMSocialControllerService * socialControllerService, BOOL isPresentInController, UMSocialDataServiceCompletion completion);

/**
 Sns平台类，用`platformName`作为标识，指定显示名称、显示的图片，点击之后的响应。
 */
@interface UMSocialSnsPlatform : NSObject

///---------------------------------------
/// @name 平台属性
///---------------------------------------

/**
 平台标示符
 */
@property (nonatomic, copy) NSString	*platformName;

/**
 显示名称
 */
@property (nonatomic, copy) NSString	*displayName;

/**
 登录名称
 */
@property (nonatomic, copy) NSString    *loginName;

/**
 分享类型
 */
@property (nonatomic, assign) UMSocialSnsType shareToType;

/**
 大图片的文件名,用于`UMSocialIconActionSheet`
 */
@property (nonatomic, copy) NSString    *bigImageName;

/**
 小图片的文件名，用于分享列表、登录、个人中心、评论编辑页面等
 */
@property (nonatomic, copy) NSString    *smallImageName;

/**
 无色的小图片文件名，用于评论编辑页面显示没有授权状态
 */
@property (nonatomic ,copy) NSString    *smallImageOffName;

/**
 处理点击分享事件后的block对象
 */
@property(nonatomic, copy) UMSocialSnsPlatformClickHandler snsClickHandler;

/**
 处理点击登录事件后的block对象
 */
@property(nonatomic, copy) UMSocialSnsPlatformLoginHandler loginClickHandler;

/**
 是否需要登录授权
 */
@property(nonatomic, assign) BOOL needLogin;

/**
 标志是否有webView授权
 */
@property(nonatomic, assign) BOOL haveWebViewAuth;
/**
 初始化方法
 
 @param platformName 作为该对象标识的平台名
 */
-(id)initWithPlatformName:(NSString *)platformName;
@end

/*
 Sns平台类管理者类
 */
@interface UMSocialSnsPlatformManager : NSObject

/**
 sns平台配置数组，此数组由allSnsArray转换，只包含平台名作为元素
 */
@property (nonatomic, readonly) NSArray *allSnsValuesArray;

/**
 该NSDictionary以各个平台名为key，UMSocialPlatform对象为value
 */
@property (nonatomic, retain) NSDictionary *allSnsPlatformDictionary;

/**
 `UMSocialSnsPlatformManager`的单例方法
 
 @return `UMSocialSnsPlatformManager`的单例对象
 */
+ (UMSocialSnsPlatformManager *)sharedInstance;


/**
 根据平台名，返回平台对象
 
 @param platformName sns平台名
 
 @return UMSocialSnsPlatform 平台对象
 */
+(UMSocialSnsPlatform *)getSocialPlatformWithName:(NSString *)snsName;

/**
 根据平台枚举变量，返回平台对象
 
 @param UMSocialSnsType sns平台枚举变量
 
 @return NSString 平台名
 */
+ (NSString *)getSnsPlatformString:(UMSocialSnsType)socialSnsType;

/**
 把配置平台的次序号转换成平台名
 
 @param snsIndex 使用的平台顺序，使用的平台配置在UMSocialConfigDelegate,例如`- (NSArray *)shareToPlatforms;`返回的是UMSocialSnsTypeSina和UMSocialSnsTypeTenc,UMSocialSnsTypeSina就是0，UMSocialSnsTypeTenc就是1
 
 @return 平台名字符串
 */
+(NSString *)getSnsPlatformStringFromIndex:(NSInteger)snsIndex;

@end
