#include "SdkHub.h"
#include "Unity/UnityInterface.h"
@implementation SdkHub

const char *_unityReceiver = "SdkControl";

static SdkHub *_sharedInstance = nil;
+(SdkHub *)sharedInstance {
    if (!_sharedInstance)
    {
        _sharedInstance = [[self alloc]init];
        [_sharedInstance Init];
    }
    return _sharedInstance;
}

-(BOOL)IsEmpty:(NSString *)source{
    if (source == nil || self == NULL) {
        return YES;
    }
    if ([source isKindOfClass:[NSNull class]]) {
        return YES;
    }
    if ([[source stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] length]==0) {
        return YES;
    }
    if ([source isEqualToString:@"(null)"]) {
        return YES;
    }
    if ([source isEqualToString:@"<null>"]) {
        return YES;
    }
    if ([source isEqualToString:@"null"]) {
        return YES;
    }
    return NO;
}

-(void)SendMessage:(NSString*)func args:(NSString*)args {
    const char* funcString = [func UTF8String];
    const char* argsString = [args UTF8String];
    UnitySendMessage(_unityReceiver, funcString, argsString);
}

-(void)Init {
    [HuoSDKApi addLogoutCallBack:^(NSDictionary *responseDic) {
        [self SendMessage:@"LogoutComplete" args:@"success"];
    }];
    [HuoSDKApi addPaySuccessedCallback:^(NSDictionary *responseDic) {
        [self SendMessage:@"PaymentComplete" args:@"success"];
    }];
}

-(void)Login:(BOOL)isAuto {
    [HuoSDKApi showLoginWithCallBack:^(NSDictionary *responseDic) {
        NSString *userid = responseDic[@"userid"];//sdk的用户id
        NSString *token = responseDic[@"token"];
        //NSString *uid = responseDic[@"uid"];
        NSLog(@"LoginComple: UserId = %@, Token = %@!", userid, token);
        if (![self IsEmpty:token])
        {
            NSString *message = [NSString stringWithFormat:@"%@,%@,%@", @"success", userid, token];
            [self SendMessage:@"LoginComplete" args:message];
            [HuoSDKApi showFloatView:nil];
        }
        else
        {
            [self SendMessage:@"LoginComplete" args:@"failed"];
        }
    }];
}

char* cStringCopy(const char* string)
{
    char* res = (char*)malloc(strlen(string) + 1);
    strcpy(res, string);
    return res;
}

-(char*)GetChannel {
    NSString *result = @"YuCheng";
    return cStringCopy([result UTF8String]);
}

-(void)Logout {
    [HuoSDKApi logout];
}

-(void)SwitchAccount {
    [self Logout];
}

-(void)Payment:(char*)payString {
    NSString *source = [NSString stringWithUTF8String:payString];
    NSArray *parameters = [source componentsSeparatedByString:@","];
    NSDictionary *payInfo = @{
        key_cpOrderid: [parameters objectAtIndex:0],
        key_serverID: [parameters objectAtIndex:1],
        key_serverName: [parameters objectAtIndex:2],
        key_productID: [parameters objectAtIndex:3],
        key_productName: [parameters objectAtIndex:4],
        key_productdesc: [parameters objectAtIndex:5],
        key_ext: [parameters objectAtIndex:6],
        key_productPrice: [parameters objectAtIndex:7],
        key_roleID: [parameters objectAtIndex:8],
        key_roleName: [parameters objectAtIndex:9],
        key_currencyName : [parameters objectAtIndex:10],
    };
    [HuoSDKApi buy:payInfo failedBlock:^{
        [self SendMessage:@"PaymentComplete" args:@"failed"];
    }];
}

-(void)SubmitRole:(char*)roleString {
    NSString *source = [NSString stringWithUTF8String:roleString];
    NSArray *parameters = [source componentsSeparatedByString:@","];
    NSString *eventString = [parameters objectAtIndex:0];
    NSString *event;
    if ([eventString isEqual: @"Create"])
        event = @"2";
    else if ([eventString isEqual: @"EnterGame"])
        event = @"1";
    else if ([eventString isEqual: @"LevelUp"])
        event = @"3";
    else
        event = @"4";
    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
    formatter.numberStyle = NSNumberFormatterRoundFloor;

    NSDictionary *roleInfo = @{
        key_dataType : event,
        key_serverID : [parameters objectAtIndex:1],
        key_serverName : [parameters objectAtIndex:2],
        key_roleID : [parameters objectAtIndex:3],
        key_roleName : [parameters objectAtIndex:4],
        key_roleLevel : [parameters objectAtIndex:5],
        key_roleVip : [parameters objectAtIndex:6],
        key_roleBalence : [parameters objectAtIndex:7],
        key_rolelevelCtime : [parameters objectAtIndex:8],
        key_rolelevelMtime : [parameters objectAtIndex:9]};
    [HuoSDKApi setRoleInfo:roleInfo];
}

@end