//
//  WAUserProxy.h
//  WASdkIntfUI
//
//  Created by GHW-T-01 on 16/3/1.
//  Copyright 漏 2016骞� GHW-T-01. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import "WALoginResult.h"
#import "WABindingResult.h"
#import "WAAccount.h"
#import "WAAppUser.h"
/*!
 @discussion 鐧诲綍鍗忚
 - - -
 */
@protocol WALoginDelegate <NSObject>

@required
/*!
 @abstract 鐧诲綍鎴愬姛
 @param result 鐧诲綍缁撴灉
 */
-(void)loginDidCompleteWithResults:(WALoginResult*)result;
/*!
 @abstract 鐧诲綍澶辫触
 @param result 鐧诲綍鐨勭敤鎴蜂俊鎭� 娉�:杩欎笉鏄櫥褰曠粨鏋�,鐢变簬鐧诲綍澶辫触鎵€浠serId鏄┖鐨�.浣嗗鏋滅涓夋柟骞冲彴(Facebook,Apple)鎺堟潈鎴愬姛,pUserId,pToken,extends涓嶄负绌�,鍙敤浜庢彁绀虹敤鎴�.
 @param error 閿欒
 */
-(void)loginDidFailWithError:(NSError*)error andResult:(WALoginResult*)result;
@optional
/*!
 @abstract 鐢ㄦ埛鍙栨秷鐧诲綍
 @param result 鐧诲綍鐨勮处鎴蜂俊鎭� (娉�:杩斿洖鐨剅esult鍙湁platform鏈夊€�)
 */
-(void)loginDidCancel:(WALoginResult*)result;

@end

/*!
 @discussion 璐︽埛缁戝畾鍗忚
 - - -
 */
@protocol WAAccountBindingDelegate <NSObject>

@required
/*!
 @abstract 缁戝畾鎴愬姛
 @param result 缁戝畾鐨勮处鎴蜂俊鎭�
 */
-(void)bindingDidCompleteWithResult:(WABindingResult*)result;
/*!
 @abstract 缁戝畾澶辫触
 @param result 缁戝畾鐨勮处鎴蜂俊鎭�
 @param error 閿欒
 */
-(void)bindingDidFailWithError:(NSError*)error andResult:(WABindingResult*)result;
@optional
/*!
 @abstract 缁戝畾鍙栨秷
 @param result 缁戝畾鐨勮处鎴蜂俊鎭�(娉�:杩斿洖鐨剅esult鍙湁platform鏈夊€�)
 */
-(void)bindingDidCancel:(WABindingResult*)result;
@end

/*!
 @discussion 鐧诲綍鐣岄潰鍗忚
 - - -
 */
@protocol WALoginViewDelegate <NSObject>

@required
/*!
 @abstract 鐧诲綍鎴愬姛
 @param result 鐧诲綍鐨勭敤鎴蜂俊鎭�
 */
-(void)loginViewDidCompleteWithResult:(WALoginResult*)result;
/*!
 @abstract 鐧诲綍澶辫触
 @param result 鐧诲綍鐨勭敤鎴蜂俊鎭� 娉�:杩欎笉鏄櫥褰曠粨鏋�,鐢变簬鐧诲綍澶辫触鎵€浠serId鏄┖鐨�.浣嗗鏋滅涓夋柟骞冲彴(Facebook,Apple)鎺堟潈鎴愬姛,pUserId,pToken,extends涓嶄负绌�,鍙敤浜庢彁绀虹敤鎴�.
 @param error 閿欒
 */
-(void)loginViewDidFailWithError:(NSError*)error andResult:(WALoginResult*)result;
@optional
/*!
 @abstract 鐢ㄦ埛鍙栨秷鐧诲綍
 @param result 鐧诲綍鐨勭敤鎴蜂俊鎭紙鍙湁platform闈炵┖锛�.
 */
-(void)loginViewDidCancel:(WALoginResult*)result;
@end

/*!
 @discussion 璐﹀彿绠$悊鐣岄潰鍗忚
 - - -
 */
@protocol WAAcctManagerDelegate <NSObject>

@required
/*!
 @abstract 鏂板缓璐︽埛鍥炶皟鎺ュ彛
 @param result 鏂板缓璐︽埛鐨勮处鎴蜂俊鎭�
 */
-(void)newAcctDidCompleteWithResult:(WALoginResult*)result;
/*!
 @abstract 鍒囨崲璐︽埛鍥炶皟鎺ュ彛
 @param result 鍒囨崲璐︽埛鐨勮处鎴蜂俊鎭�
 */
-(void)switchAcctDidCompleteWithResult:(WALoginResult*)result;
@end


/*!
 @discussion WAUserProxy 鏄敤鎴锋ā鍧楃殑浠g悊绫汇€傚姛鑳藉寘鎷缃櫥褰曟祦绋嬨€佺櫥褰曘€佺櫥鍑恒€佺粦瀹氥€佽В缁戙€佹煡璇㈠綋鍓嶇敤鎴风粦瀹氱殑绗笁鏂瑰钩鍙拌处鎴峰垪琛ㄣ€佸垏鎹㈣处鍙枫€佸垱寤鸿处鍙风瓑绛夈€�
 - - -
 */

@interface WAUserProxy : NSObject

/*!
 @discussion 璁剧疆鐧诲綍娴佺▼
 @param flowType 甯搁噺WA_LOGIN_FLOW_TYPE_DEFAULT鏄粯璁ゆā寮忥紝琛ㄧず鍒囨崲鏂拌处鎴风殑鏃跺€欎笉杩涜璁惧缁戝畾鎿嶄綔锛屼笅娆¤皟鐢ㄥ尶鍚嶇櫥褰曡繕鏄櫥褰曚箣鍓嶇殑璐︽埛銆傚父閲廤A_LOGIN_FLOW_TYPE_REBIND鍒囨崲鏂拌处鎴风殑鏃跺€欏皢褰撳墠璁惧鐨刢lientId缁戝畾鍒版柊璐︽埛涓紝涓嬩竴娆″尶鍚嶇櫥褰曠殑鏃跺€欏皢浼氱櫥褰曞埌鏂拌处鎴枫€�
 */
+(void)setLoginFlowType:(int)flowType;

/*!
 @discussion 鑾峰彇鐧诲綍娴佺▼
 */
+(int)getLoginFlowType;

/*!
 @discussion 鐧诲綍鎺ュ彛
 @param platform 鐧诲綍骞冲彴锛氱洰鍓嶇殑鐧诲綍骞冲彴鏈塅acebook锛孉pple锛孏UEST,瀵瑰簲鐨勫父閲忓垎鍒槸WA_PLATFORM_FACEBOOK锛學A_PLATFORM_APPLE锛學A_PLATFORM_WINGA銆�
 @param extInfo 鎵╁睍淇℃伅
 @param delegate 濮旀墭
 */
+(void)loginWithPlatform:(NSString *const)platform extInfo:(NSString*)extInfo delegate:(id<WALoginDelegate>)delegate;
/*!
 @discussion 鐧诲嚭鎺ュ彛
 */
+(void)logout;

/*!
 @discussion 缁戝畾璐︽埛鎺ュ彛
 @param platform 缁戝畾骞冲彴:鐩墠鏈塅acebook,Apple,瀵瑰簲鐨勫父閲忓垎鍒负WA_PLATFORM_FACEBOOK,WA_PLATFORM_APPLE
 @param extInfo 鎵╁睍淇℃伅
 @param delegate 濮旀墭
 */
+(void)bindingAccountWithPlatform:(NSString *const)platform extInfo:(NSString*)extInfo delegate:(id<WAAccountBindingDelegate>)delegate;
/*!
 @discussion 鏌ヨ缁戝畾鐨勭涓夋柟骞冲彴璐︽埛鍒楄〃
 @param block 鍥炶皟
 @error 閿欒
 @accounts 鏁扮粍accounts瀛樻斁鐫€WAAccount绫诲瀷鐨勫璞�.
 */
+(void)queryBoundAccountWithCompleteBlock:(void(^)(NSError* error,NSArray<WAAccount *>* accounts))block;
/*!
 @discussion 瑙g粦璐﹀彿鎺ュ彛
 @param platform 瑙g粦骞冲彴(WAAccount涓殑platform)
 @param pUserId 绗笁鏂瑰钩鍙扮敤鎴穒d(WAAccount涓殑pUserId)
 */
+(void)unBindAccountWithPlatform:(NSString *const)platform platformUserId:(NSString*)pUserId completeBlock:(void(^)(NSError* error))completeBlock;
/*!
 @discussion 鍒囨崲璐﹀彿鎺ュ彛
 @param platform 鍒囨崲骞冲彴
 @param completeBlock 鍥炶皟缁撴灉锛氬寘鎷琫rror(閿欒)鍜宺esult(鐧诲綍缁撴灉)
 */
+(void)switchAccountWithPlatform:(NSString *const)platform completeBlock:(void(^)(NSError* error,WALoginResult* result))completeBlock;

/*!
 @discussion 鍒涘缓璐﹀彿鎺ュ彛
 @param completeBlock 鍥炶皟缁撴灉锛氬寘鎷琫rror(閿欒)鍜宺esult(鍒涘缓缁撴灉)
 */
+(void)createNewAccountWithCompleteBlock:(void(^)(NSError* error,WALoginResult* result))completeBlock;


/*!
 @abstract 璋冪敤姝ゆ柟娉曟墦寮€鐧诲綍鐣岄潰
 @param delegate 濮旀墭
 @param cacheEnabled 鏄惁缂撳瓨鐧诲綍鏂瑰紡 褰撹鍙傛暟涓篩ES锛岄粯璁や互涓婃鐧诲綍鏂瑰紡鐧诲綍锛屼笉浼氬脊鍑虹櫥褰曢€夋嫨妗嗐€�
 */
+(void)login:(id<WALoginViewDelegate>)delegate cacheEnabled:(BOOL)cacheEnabled;
/*!
 @abstract 璋冪敤姝ゆ柟娉曢殣钘忕櫥褰曠晫闈�
 */
+(void)hide;
/*!
 @abstract 娓呴櫎鐧诲綍鏂瑰紡鐨勭紦瀛� 娓呴櫎缂撳瓨涔嬪悗浼氬啀娆″脊鍑虹櫥褰曢€夋嫨妗�
 */
+(void)clearLoginCache;
/*!
 @abstract 璋冪敤姝ゆ柟娉曟墦寮€璐︽埛绠$悊鐣岄潰
 @param delegate 濮旀墭
 */
+(void)openAccountManager:(id<WAAcctManagerDelegate>)delegate;

/*!
 @abstract 鑾峰彇璐︽埛淇℃伅
 @param platform 骞冲彴
 */
+(WAAppUser*)getAccountInfoWithPlatform:(NSString *const)platform;

//+(NSString*)transferWithPlatform:(NSString *const)platform;

/*!
 @discussion 澶勭悊UIApplicationDelegate鐨勬柟娉昜-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions]浼犻€掕繃鏉ョ殑鍙傛暟銆�
 */
+ (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;

/*!
 @discussion 澶勭悊UIApplicationDelegate鐨勬柟娉昜- (void)applicationDidBecomeActive:(UIApplication *)application]浼犻€掕繃鏉ョ殑鍙傛暟銆�
 */
+(void)applicationDidBecomeActive:(UIApplication *)application;

/*!
 @discussion 澶勭悊UIApplicationDelegate鐨勬柟娉昜- (void)applicationWillEnterForeground:(UIApplication *)application]浼犻€掕繃鏉ョ殑鍙傛暟銆�
 */
+(void)applicationWillEnterForeground:(UIApplication *)application;

/*!
 @discussion 澶勭悊UIApplicationDelegate鐨勬柟娉昜- (void)applicationDidEnterBackground:(UIApplication *)application]浼犻€掕繃鏉ョ殑鍙傛暟銆�
 */
+(void)applicationDidEnterBackground:(UIApplication *)application;

/*!
 @discussion 澶勭悊UIApplicationDelegate鐨勬柟娉昜-(BOOL)application:(UIApplication *)application
 openURL:(NSURL *)url
 sourceApplication:(NSString *)sourceApplication
 annotation:(id)annotation]浼犻€掕繃鏉ョ殑鍙傛暟銆�
 */
+(BOOL)application:(UIApplication *)application
           openURL:(NSURL *)url
 sourceApplication:(NSString *)sourceApplication
        annotation:(id)annotation;

/*!
 @discussion 锛坱ip:CP鏃犻渶鍏虫敞锛夋鏂规硶涓烘垚鍔熺櫥褰曠涓夋柟骞冲彴涔嬪悗璋冪敤銆傛牴鎹涓夋柟骞冲彴鐨刾UserId锛宲Token锛宲latform鏋勫缓涓€涓猈ALoginResult瀹炰緥浣滀负鍙傛暟璋冪敤姝ゆ柟娉曘€傛鏂规硶灏嗕細璋冪敤WindAnalytics鐨勭櫥褰曟帴鍙c€�
 @param result 鐧诲綍缁撴灉
 @param delegate 濮旀墭
 */
+(void)loginWithResult:(WALoginResult*)result delegate:(id<WALoginDelegate>)delegate;

+(void)loginWithResult:(WALoginResult*)result extInfo:(NSString*)extInfo delegate:(id<WALoginDelegate>)delegate;

/*!
 @discussion 锛坱ip:CP鏃犻渶鍏虫敞锛夎缃綋鍓嶇殑鐧诲綍骞冲彴
 */
+(void)setCurrentLoginPlatform:(NSString *const)platform;
/*!
 @discussion 锛坱ip:CP鏃犻渶鍏虫敞锛夎幏鍙栧綋鍓嶇殑鐧诲綍骞冲彴
 */
+(NSString*)getCurrentLoginPlatform;
/*!
 @discussion 锛坱ip:CP鏃犻渶鍏虫敞锛夎幏鍙栧綋鍓嶇殑鐧诲綍缁撴灉
 */
+(WALoginResult*)getCurrentLoginResult;

/*!
 @discussion 锛坱ip:CP鏃犻渶鍏虫敞锛夎幏鍙栫敤鎴锋ā鍧楃粍浠�
 */
+(NSArray*)getUserComponents;
@end