//
//  KWMAPIManager.h
//
//  Created by kevin on 3/14/15.
//

#import <Foundation/Foundation.h>

#import "AFNetworking.h"
#import <PPNetworkHelper/PPNetworkHelper.h>
#import "KWMRequestListResult.h"
#import "KWMRequestResult.h"
#import "KWMCemaroseResult.h"
#import "KWMCustomer.h"
#import "KWMCustomerResult.h"
#import "KWMBrandsResult.h"
#import "KWMSearchResult.h"
#import "KWMBlogResult.h"
#import "KWMPageResult.h"
#import "KWMNewGoodsModel.h"
#import "KWMNewProducts.h"
#import "KWMProductTypeResult.h"
#import "KWMProductType.h"
#import "KWMBrandsTypeResult.h"
#import "KWMMetafieldResult.h"
#import "KWMMetafield.h"
#import "KWMAppVersion.h"
#import "KWMProductResult.h"
#import "KWMProduct.h"
#import "KWMOrdersResult.h"
#import "KWMOrder.h"
#import "KWMExchangeRateResult.h"
#import "KWMCartResult.h"
#import "KWMCheckoutPayResult.h"
#import "KWMAdditionalResult.h"
#import "KWMAdditionalListResult.h"
#import "KWMWechatPayData.h"
#import "KWMOrderPaid.h"
#import "KWMWish.h"
#import "KWMHomeDataResult.h"
#import "KWMDictionaryResult.h"
#import "KWMOrderListResult.h"



#define KWM_COMMON_DATE_FORMAT @"yyyy-MM-dd HH:mm:ss"
#define KWM_PAGE_SIZE 20
#define SESSID                          @"PHPSESSID"

//#define API_HOST                        @"toyoung.kollway.com"

//#define API_HOST                        @"192.168.0.5"

#define API_HOST                        @"apps.cemarose.com"

#define API_HOST_PORT                   8088

@interface KWMAPIManager : NSObject

@property (nonatomic) NSString *baseUrl;

+ (KWMAPIManager *)sharedManager;
- (NSString *)toAbsoluteUrl:(NSString *)relativeUrl;


- (NSURLSessionDataTask *) adminUserSuccess:(void(^)(NSURLSessionDataTask *task,KWMDictionaryResult *result))success failure:(void(^)(NSURLSessionDataTask *task,NSError *error))failure;

/**
 * 手机登录-获取短信API
 * @param parameters {mobile=?手机号}
 * @param success 成功callback
 * @param failure 失败callback
 * @return NSURLSessionDataTask
 */
- (NSURLSessionDataTask *) phoneSms:(NSDictionary *)parameters
                            success:(void(^)(NSURLSessionDataTask *task,KWMCemaroseResult *result))success
                            failure:(void(^)(NSURLSessionDataTask *task,NSError *error))failure;


/**
 *  登陆网站接口
 *
 *  @param success <#success description#>
 *  @param failure <#failure description#>
 */
- (void) loginWebSuccess:(void(^)()) success failure:(void(^)(NSError *error)) failure;

/**
 *  立即购买使用
 *
 *  @param variantId <#variantId description#>
 *  @param quantity  <#quantity description#>
 *  @param success   <#success description#>
 *  @param failure   <#failure description#>
 *
 *  @return <#return value description#>
 */
- (NSURLSessionDataTask *) tmpCartWithVariantId:(NSNumber *) variantId quantity:(NSInteger) quantity success:(void(^)(NSURLSessionDataTask *task,NSString *cartCookie)) success failure:(void(^)(NSURLSessionDataTask *task,NSError *error)) failure;
/**
 *  添加商品到购物车
 *
 *  @param variantId <#variantId description#>
 *  @param quantity  <#quantity description#>
 *  @param success   <#success description#>
 *  @param failure   <#failure description#>
 *
 *  @return <#return value description#>
 */
- (NSURLSessionDataTask *) addProductWithVariantId:(NSNumber *) variantId quantity:(NSInteger) quantity success:(void(^)(NSURLSessionDataTask *task,KWMRequestResult *result)) success failure:(void(^)(NSURLSessionDataTask *task,NSError *error)) failure;
/**
 *
 *
 *  @param variantId <#variantId description#>
 *  @param success   <#success description#>
 *  @param failure   <#failure description#>
 *
 *  @return <#return value description#>
 */
- (NSURLSessionDataTask *) changeProductWithVariantId:(NSNumber *) variantId quantity:(NSInteger) quantity success:(void(^)(NSURLSessionDataTask *task,KWMCartResult *result)) success failure:(void(^)(NSURLSessionDataTask *task,NSError *error)) failure;

-(NSURLSessionDataTask *) updateProductWithVariantIds:(NSArray<NSNumber *> *) variantIds quantities:(NSArray<NSNumber *> *) quantities success:(void(^)(NSURLSessionDataTask *task,KWMCartResult *result)) success failure:(void(^)(NSURLSessionDataTask *task,NSError *error)) failure;

/**
 *  获取系统购物车
 *
 *  @param success <#success description#>
 *  @param failure <#failure description#>
 *
 *  @return <#return value description#>
 */
- (NSURLSessionDataTask *) getCartSuccess:(void(^)(NSURLSessionDataTask *task,KWMCartResult *result)) success failure:(void(^)(NSURLSessionDataTask *task,NSError *error)) failure;

/**
 * 手机登录API
 * @param parameters {mobile=?手机号,code=?收到的短信验证码}
 * @param success 成功callback
 * @param failure 失败callback
 * @return NSURLSessionDataTask
 */
- (NSURLSessionDataTask *) phoneLogin:(NSDictionary *)parameters
                              success:(void(^)(NSURLSessionDataTask *task,KWMCustomerResult *result))success
                              failure:(void(^)(NSURLSessionDataTask *task,NSError *error))failure;


/**
 * 获取所有品牌
 * @return NSURLSessionDataTask
 */
- (NSURLSessionDataTask *) getAllBrand:(NSDictionary *)parameters
                               cacheCallback:(void(^)(KWMBrandsResult *result))cacheCallback
                               success:(void(^)(NSURLSessionDataTask *task,KWMBrandsResult *result))success
                               failure:(void(^)(NSURLSessionDataTask *task,NSError *error))failure;

/**
 * 搜索API
 * @param parameters {keyword=?搜索内容}
 * @return NSURLSessionDataTask
 */
- (NSURLSessionDataTask *) searchProduct:(NSDictionary *)parameters
                               success:(void(^)(NSURLSessionDataTask *task,KWMSearchResult *result))success
                               failure:(void(^)(NSURLSessionDataTask *task,NSError *error))failure;

/**
 * 博客API
 * @return NSURLSessionDataTask
 */
- (NSURLSessionDataTask *) getAllBlog:(NSDictionary *)parameters
                        cacheCallback:(void(^)(KWMBlogResult *result))cacheCallback
                              success:(void(^)(NSURLSessionDataTask *task,KWMBlogResult *result))success
                              failure:(void(^)(NSURLSessionDataTask *task,NSError *error))failure;
- (NSURLSessionDataTask *) getAllPage:(NSDictionary *)parameters
                              success:(void(^)(NSURLSessionDataTask *task,KWMPageResult *result))success
                              failure:(void(^)(NSURLSessionDataTask *task,NSError *error))failure;
/**
 *  首页板块数据
 *
 *  @param success <#success description#>
 *  @param failure <#failure description#>
 *
 *  @return <#return value description#>
 */
- (NSURLSessionDataTask *) getHomeDataWithSuccess:(void(^)(NSURLSessionDataTask *task,KWMHomeDataResult *result))success
                                          failure:(void(^)(NSURLSessionDataTask *task,NSError *error))failure;

/**
 * 商品——新品API
 * @return NSURLSessionDataTask
 */
- (NSURLSessionDataTask *) getNewProducts:(NSDictionary *)parameters
                              success:(void(^)(NSURLSessionDataTask *task,KWMNewProducts *result))success
                              failure:(void(^)(NSURLSessionDataTask *task,NSError *error))failure;

/**
 * 商品——打折API
 * @return NSURLSessionDataTask
 */
- (NSURLSessionDataTask *) getDiscountProducts:(NSDictionary *)parameters
                                       success:(void(^)(NSURLSessionDataTask *task,KWMNewProducts *result))success
                                       failure:(void(^)(NSURLSessionDataTask *task,NSError *error))failure;

/**
 * 获取商品分类API
 * @return NSURLSessionDataTask
 */
- (NSURLSessionDataTask *) getProductTypes:(NSDictionary *)parameters type:(NSInteger)type
                                   success:(void(^)(NSURLSessionDataTask *task,KWMProductTypeResult *result))success
                                   failure:(void(^)(NSURLSessionDataTask *task,NSError *error))failure;
/**
 * 品牌类型--API
 * @return NSURLSessionDataTask
 */
- (NSURLSessionDataTask *) getBrandsType:(NSDictionary *)parameters
                                 success:(void(^)(NSURLSessionDataTask *task,KWMBrandsTypeResult *result))success
                                 failure:(void(^)(NSURLSessionDataTask *task,NSError *error))failure;

/**
 * 汇率--API
 * @return NSURLSessionDataTask
 */
- (NSURLSessionDataTask *) getExchangeRate:(NSDictionary *)parameters
                                   success:(void(^)(NSURLSessionDataTask *task,KWMExchangeRateResult *result))success
                                   failure:(void(^)(NSURLSessionDataTask *task,NSError *error))failure;

/**
 * 获取获取某个订单api
 * @return NSURLSessionDataTask
 */
- (NSURLSessionDataTask *) getAdminOrder:(NSDictionary *)parameters orderId:(NSNumber *)orderId
                            success:(void(^)(NSURLSessionDataTask *task,KWMOrdersResult *result))success
                            failure:(void(^)(NSURLSessionDataTask *task,NSError *error))failure;

/**
 * 获取产品扩展字段--API
 * @return NSURLSessionDataTask
 */
- (NSURLSessionDataTask *) getProductMetafield:(NSDictionary *)parameters productId:(NSNumber *)productId
                                    success:(void(^)(NSURLSessionDataTask *task,KWMMetafieldResult *result))success
                                    failure:(void(^)(NSURLSessionDataTask *task,NSError *error))failure;

/**
 * 获取商品api,因為admin商品有剩余库存数量字段,所以商品詳細還需要請求此api。
 * @return NSURLSessionDataTask
 */
- (NSURLSessionDataTask *) getAdminProduct:(NSDictionary *)parameters productId:(NSNumber *)productId
                                   success:(void(^)(NSURLSessionDataTask *task,KWMProductResult *result))success
                                   failure:(void(^)(NSURLSessionDataTask *task,NSError *error))failure;

- (NSURLSessionDataTask *) getAdminProductsById:(NSArray *) ids
                                        success:(void(^)(NSURLSessionDataTask *task,KWMProductResult *result))success
                                        failure:(void(^)(NSURLSessionDataTask *task,NSError *error))failure;
/**
 * 取消订单api
 * amount 退款金额 (default: false)(十进制:21.20)If set, Shopify will attempt to void/refund the payment depending on the status.
 * restock 是否将此订单商品重新包装会商店 (default: false)
 * reason 订单取消原因 (用户customer, 库存inventory, 假货fraud, 其他other)(default: other)
 * email 发送邮箱通知用户 (default: false)
 * refund 更复杂的退款方式 As specified in the Refund documentation. Required for some more complex refund situations.
 * @return NSURLSessionDataTask
 */
- (NSURLSessionDataTask *) cancelOrder:(NSDictionary *)parameters orderId:(NSNumber *)orderId
                               success:(void(^)(NSURLSessionDataTask *task,KWMProductResult *result))success
                               failure:(void(^)(NSURLSessionDataTask *task,NSError *error))failure;

/**
 * 微信统一下单API
 * @return NSURLSessionDataTask
 */
- (NSURLSessionDataTask *) wechatPayUnifiedOrder:(NSDictionary *)parameters
                                         success:(void(^)(NSURLSessionDataTask *task,KWMCheckoutPayResult *result))success
                                         failure:(void(^)(NSURLSessionDataTask *task,NSError *error))failure;

/**
 * 支付宝统一下单API
 * @return NSURLSessionDataTask
 */
- (NSURLSessionDataTask *) aliPayUnifiedOrder:(NSDictionary *)parameters
                                      success:(void(^)(NSURLSessionDataTask *task,KWMCheckoutPayResult *result))success
                                      failure:(void(^)(NSURLSessionDataTask *task,NSError *error))failure;

/**
 * 微信订单查询API
 * @return NSURLSessionDataTask
 */
- (NSURLSessionDataTask *) wechatPayOrderQuery:(NSDictionary *)parameters
                                       success:(void(^)(NSURLSessionDataTask *task,KWMCheckoutPayResult *result))success
                                       failure:(void(^)(NSURLSessionDataTask *task,NSError *error))failure;

/**
 * 支付宝订单查询API
 * @return NSURLSessionDataTask
 */
- (NSURLSessionDataTask *) aliPayOrderQuery:(NSDictionary *)parameters
                                    success:(void(^)(NSURLSessionDataTask *task,KWMCheckoutPayResult *result))success
                                    failure:(void(^)(NSURLSessionDataTask *task,NSError *error))failure;

/**
 * 通过checkout_token查询shopify订单API
 * @return NSURLSessionDataTask
 */
- (NSURLSessionDataTask *) appOrderQuery:(NSDictionary *)parameters
                                 success:(void(^)(NSURLSessionDataTask *task,KWMCheckoutPayResult *result))success
                                 failure:(void(^)(NSURLSessionDataTask *task,NSError *error))failure;

/**
 * 用户添加 wish API
 * @return NSURLSessionDataTask
 */
- (NSURLSessionDataTask *) saveWish:(NSDictionary *)parameters
                            success:(void(^)(NSURLSessionDataTask *task,KWMAdditionalListResult *result))success
                            failure:(void(^)(NSURLSessionDataTask *task,NSError *error))failure;

/**
 * 获取用户 wishlist API
 * @return NSURLSessionDataTask
 */
- (NSURLSessionDataTask *) getWishList:(NSDictionary *)parameters
                               success:(void(^)(NSURLSessionDataTask *task,KWMAdditionalListResult *result))success
                               failure:(void(^)(NSURLSessionDataTask *task,NSError *error))failure;

/**
 * 移除指定 wish API
 * @return NSURLSessionDataTask
 */
- (NSURLSessionDataTask *) removeWish:(NSDictionary *)parameters
                              success:(void(^)(NSURLSessionDataTask *task,KWMAdditionalListResult *result))success
                              failure:(void(^)(NSURLSessionDataTask *task,NSError *error))failure;

/**
 * 清空愿望单 API
 * @return NSURLSessionDataTask
 */
- (NSURLSessionDataTask *) clearWishList:(NSDictionary *)parameters
                                 success:(void(^)(NSURLSessionDataTask *task,KWMAdditionalListResult *result))success
                                 failure:(void(^)(NSURLSessionDataTask *task,NSError *error))failure;

/**
 * 获得所有订单 API
 * @return NSURLSessionDataTask
 */
- (NSURLSessionDataTask *) getOrderList:(NSDictionary *)parameters
                                success:(void(^)(NSURLSessionDataTask *task,KWMOrderListResult *result))success
                                failure:(void(^)(NSURLSessionDataTask *task,NSError *error))failure;

@end