//
//  KWMPayUtil.m
//  iCemarose
//
//  Created by HouWeiBin on 2017/6/15.
//  Copyright © 2017年 kollway. All rights reserved.
//

#import "KWMPayUtil.h"
#import "KWMStringUtil.h"

@implementation KWMPayUtil

+(NSString *)payTypeString:(KWMPayType)payType{
    NSString *payTypeString = @"";
    switch (payType) {
        case TypeNone:
            payTypeString = @"请选择一种付款方式";
            break;
        case TypeCredit:
            payTypeString = @"信用卡支付";
            break;
        case TypeWechatPay:
            payTypeString = @"微信支付";
            break;
        case TypeAlipay:
            payTypeString = @"支付宝支付";
            break;
        case TypeWebpay:
            payTypeString = @"网页支付";
    }
    return payTypeString;
}

+(NSDictionary *)wechatPayParameters:(BUYCheckout *)checkout{
    //这是测试商店的单,先用来测试
#if DEBUG
    NSString *checkout_token = checkout.token;
    NSString *total_price = [NSString stringWithFormat:@"%.2f",checkout.totalPrice.floatValue];
    //先写test,后面改成正式的订单描述
#else
    NSString *checkout_token = checkout.token;
    //需要保留小数点后两位(包括小数点后的.00),以保持与后台一致,从而验证通过
    NSString *total_price = [NSString stringWithFormat:@"%.2f",checkout.totalPrice.floatValue];
#endif
    NSString *ip_address = @"127.0.0.1";
    NSString *before_sign = [NSString stringWithFormat:@"checkout_token=%@&ip_address=%@&total_price=%@&key=%@",
                             checkout_token,ip_address,total_price,User_Pay_KEY];
    NSString *base64String = [KWMStringUtil BASE64:before_sign];
    NSString *sign = [KWMStringUtil MD5:base64String];
    
    NSDictionary *parameters = @{
                                 @"ip_address":ip_address,
                                 @"checkout_token":checkout_token,
                                 @"total_price":total_price,
                                 @"sign":sign
                                 };
    return parameters;
}

+(NSDictionary *)aliPayParameters:(BUYCheckout *)checkout{
    //这是测试商店的单,先用来测试
#if DEBUG
    NSString *checkout_token = checkout.token;
    NSString *total_price = [NSString stringWithFormat:@"%.2f",checkout.totalPrice.floatValue];
#else
    NSString *checkout_token = checkout.token;
    //需要保留小数点后两位(包括小数点后的.00),以保持与后台一致,从而验证通过
    NSString *total_price = [NSString stringWithFormat:@"%.2f",checkout.totalPrice.floatValue];
#endif
    NSString *before_sign = [NSString stringWithFormat:@"checkout_token=%@&total_price=%@&key=%@",
                             checkout_token,total_price,User_Pay_KEY];
    NSString *base64String = [KWMStringUtil BASE64:before_sign];
    NSString *sign = [KWMStringUtil MD5:base64String];
    
    NSDictionary *parameters = @{
                                 @"checkout_token":checkout_token,
                                 @"total_price":total_price,
                                 @"sign":sign
                                 };
    return parameters;
}

//微信支付后直接切换回到APP会调用此方法
+(NSDictionary *)payResultParameters:(BUYCheckout *)checkout tradeNo:(NSString *)tradeNo{
#if DEBUG
    NSString *checkout_token = checkout.token;
#else
    NSString *checkout_token = checkout.token;
#endif
    NSString *out_trade_no = tradeNo?:@"";
    NSString *before_sign = [NSString stringWithFormat:@"checkout_token=%@&out_trade_no=%@&key=%@",
                             checkout_token,out_trade_no,User_Pay_KEY];
    NSString *base64String = [KWMStringUtil BASE64:before_sign];
    NSString *sign = [KWMStringUtil MD5:base64String];
    NSDictionary *parameters = @{
                                 @"checkout_token":checkout_token,
                                 @"out_trade_no":out_trade_no,
                                 @"sign":sign
                                 };
    return parameters;
}

+(void)weChatPay:(KWMWechatPayData *)wechatData{
    if(wechatData){
        PayReq *request = [[PayReq alloc] init];
        request.openID = wechatData.appid;
        request.partnerId = wechatData.partnerid;
        request.prepayId= wechatData.prepayid;
        request.package = wechatData.package;
        request.nonceStr= wechatData.noncestr;
        request.timeStamp= (UInt32)wechatData.timestamp;
        request.sign= wechatData.sign;
        [WXApi sendReq:request];
    }
}

+(void)aliPay:(NSString *)alipayData callback:(CompletionBlock)callback{
    if(![KWMStringUtil isEmpty:alipayData]){
        NSString *appScheme = @"iCemarose";
        [[AlipaySDK defaultService] payOrder:alipayData fromScheme:appScheme callback:callback];
    }
}

/*
|code|int|1000|正常响应|
|code|int|1001|订单检索失败,未找到相应的订单数据|
|code|int|1002|请求的总金额与订单中不一致|
|code|int|1003|货币转换失败|
|code|int|1004|服务器端未开通店铺|
|code|int|1005|支付网关参数未设置|
|code|int|1006|订单已支付完成|
|code|int|1007|签名验证失败|
|code|int|1008|订单查询失败|
|code|int|1009|订单创建失败|
|code|int|1010|必要参数缺失|
|code|int|1012|商品数量不足|
 */
+(NSString *)payErrorMessage:(BUYCheckout *)checkout errorResult:(KWMCheckoutPayResult *)errorResult{
    if(!errorResult){
        return @"";
    }
    if(errorResult.code){
        switch (errorResult.code.integerValue) {
            case 1000:
                return @"";
            case 1001:
                return @"订单检索失败,未找到相应的订单数据";
            case 1002:
                return @"请求的总金额与订单中不一致";
            case 1003:
                return @"货币转换失败";
            case 1004:
                return @"服务器端未开通店铺";
            case 1005:
                return @"支付网关参数未设置";
            case 1006:
                return @"订单已支付完成";
            case 1007:
                return @"签名验证失败";
            case 1008:
                return @"订单查询失败";
            case 1009:
                return @"订单创建失败";
            case 1010:
                return @"必要参数缺失";
            case 1012:
                if(!(checkout && errorResult.variantId) ){
                    return @"";
                }
                for(BUYCartLineItem *item in checkout.lineItemsArray){
                    if([item.variantId isEqualToNumber:errorResult.variantId]){
                        NSString *message = [NSString stringWithFormat:@"商品“%@/%@”数量不足",item.title,item.variantTitle];
                        return message;
                    }
                }
                return @"商品数量不足";
        }
    }
    return @"";
}


@end