//
//  RAUtils.m
//  RedAnt ERP Mobile
//
//  Created by Ray on 9/17/15.
//  Copyright (c) 2015 United Software Applications, Inc. All rights reserved.
//

#import "RAUtils.h"
//#import "LoginViewController.h"
//#import "MainViewController.h"
#import <sys/param.h>
#import <sys/mount.h>
#import "const.h"


#import "ZipArchive.h"
@implementation RAUtils


+(NSString*) getdbzip
{
    
    
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
    NSString *documents = /*[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];*/[paths objectAtIndex:0];
    NSString *database_path = [documents stringByAppendingPathComponent:DBNAME];
    
    
            NSString* temp = NSTemporaryDirectory();
    
    NSString* uuid=[[NSUUID UUID] UUIDString];
    
    NSString *tempfile = [temp stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.zip",uuid]];
    
    ZipArchive* zip = [[ZipArchive alloc] init];
    
    
    BOOL result = [zip CreateZipFile2:tempfile Password:@"usai2010"];
    

        result = [zip addFileToZip:database_path newname:[database_path lastPathComponent]];
    return tempfile;
    
    

}
+(NSData*) getdbfile
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
    NSString *documents = /*[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];*/[paths objectAtIndex:0];
    NSString *database_path = [documents stringByAppendingPathComponent:DBNAME];
    return [NSData dataWithContentsOfFile:database_path];
    
    
}
+(NSDictionary*) dictfromfile:(NSString*) path
{
    NSData *filedata = [NSData dataWithContentsOfFile:path];
    
    NSError *error = nil;
    NSDictionary *string2dic = [NSJSONSerialization JSONObjectWithData: filedata
                                                               options: NSJSONReadingMutableContainers
                                                                 error: &error];
    // DebugLog(@"%@",string2dic);
    return string2dic;
    
}
+ (NSArray*) allFilesAtPath:(NSString*) dirString
{
    
    NSMutableArray* array = [NSMutableArray arrayWithCapacity:10];
    
    NSFileManager* fileMgr = [NSFileManager defaultManager];
    
    NSArray* tempArray = [fileMgr contentsOfDirectoryAtPath:dirString error:nil];
    
    for (NSString* fileName in tempArray) {
        
        BOOL flag = YES;
        
        NSString* fullPath = [dirString stringByAppendingPathComponent:fileName];
        
        if ([fileMgr fileExistsAtPath:fullPath isDirectory:&flag]) {
            
            if (!flag) {
                
                [array addObject:fullPath];
                
            }
            
        }
        
    }
    
    return array;
    
}
+ (bool)mergeContentsOfPath:(NSString *)srcDir intoPath:(NSString *)dstDir error:(NSError**)err {
    
    DebugLog(@"- mergeContentsOfPath: %@\n intoPath: %@", srcDir, dstDir);
    
    NSFileManager *fm = [NSFileManager defaultManager];
    NSDirectoryEnumerator *srcDirEnum = [fm enumeratorAtPath:srcDir];
    NSString *subPath;
    while ((subPath = [srcDirEnum nextObject])) {
        
        DebugLog(@" subPath: %@", subPath);
        NSString *srcFullPath =  [srcDir stringByAppendingPathComponent:subPath];
        NSString *potentialDstPath = [dstDir stringByAppendingPathComponent:subPath];
        
        // Need to also check if file exists because if it doesn't, value of `isDirectory` is undefined.
        BOOL isDirectory = ([[NSFileManager defaultManager] fileExistsAtPath:srcFullPath isDirectory:&isDirectory] && isDirectory);
        
        // Create directory, or delete existing file and move file to destination
        if (isDirectory) {
            DebugLog(@"   create directory");
            [fm createDirectoryAtPath:potentialDstPath withIntermediateDirectories:YES attributes:nil error:err];
            if (err && *err) {
                DebugLog(@"ERROR: %@", *err);
                return false;
            }
        }
        else {
            if ([fm fileExistsAtPath:potentialDstPath]) {
                DebugLog(@"   removeItemAtPath");
                [fm removeItemAtPath:potentialDstPath error:err];
                if (err && *err) {
                    DebugLog(@"ERROR: %@", *err);
                    return false;
                }
            }
            
            DebugLog(@"   moveItemAtPath");
            [fm moveItemAtPath:srcFullPath toPath:potentialDstPath error:err];
            if (err && *err) {
                DebugLog(@"ERROR: %@", *err);
                return false;
            }
        }
    }
    [fm removeItemAtPath:srcDir error:err];
    if (err && *err) {
        DebugLog(@"ERROR: %@", *err);
        return false;
    }
    return true;
}
+(void) enum_font
{
    return;
    NSArray *familys = [UIFont familyNames];
    
    for (int i = 0; i < familys.count; i++)
    {
        NSString *family = [familys objectAtIndex:i];
        DebugLog(@"=====Fontfamily:%@", family);
        NSArray *fonts = [UIFont fontNamesForFamilyName:family];
        for(int j = 0; j < fonts.count; j++)
        {
            DebugLog(@"***FontName:%@", [fonts objectAtIndex:j]);
        }
    }
}


+(NSTextCheckingResult*) expression_findfistMatch:(NSString*)content regex:(NSString*) pattern
{
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:nil error:nil];
    
    NSTextCheckingResult *match = [regex firstMatchInString:content options:nil range:NSMakeRange(0, content.length)];
    return match;
//    if (matches) {
//        for (NSTextCheckingResult *match in matches) {
//            for (int i = 0; i < match.numberOfRanges; ++i) {
//                DebugLog(@"-> %@", [content substringWithRange:[match rangeAtIndex:i]]);
//            }
//        }
//    }
//    return matches;
}
+(NSArray*) expression_varable:(NSString*)content regex:(NSString*) pattern
{
    
    if(content==nil)
        return nil;

    
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:nil error:nil];
    
    NSArray *matches = [regex matchesInString:content options:nil range:NSMakeRange(0, content.length)];
    
    if (matches) {
        for (NSTextCheckingResult *match in matches) {
            for (int i = 0; i < match.numberOfRanges; ++i) {
                DebugLog(@"-> %@", [content substringWithRange:[match rangeAtIndex:i]]);
            }
        }  
    }
    return matches;
}
+ (CGRect)rectAlign:(CGRect )parent rect:(CGRect)rect hAlign:(NSString*)hAlign vAlign:(NSString*)vAlign
{
//    double cx=parent.origin.x+parent.size.width/2;
//    double cy=parent.origin.y+parent.size.height/2;
    CGPoint centerpoint= CGPointMake(parent.origin.x+parent.size.width/2,parent.origin.y+parent.size.height/2);
    if([hAlign.lowercaseString isEqualToString:@"center"])
    {
        rect=CGRectMake(centerpoint.x-rect.size.width/2, rect.origin.y, rect.size.width, rect.size.height);
    }
    else
    if([hAlign.lowercaseString isEqualToString:@"left"])
    {
        rect=CGRectMake(parent.origin.x, rect.origin.y, rect.size.width, rect.size.height);
    }
    else
        if([hAlign.lowercaseString isEqualToString:@"right"])
        {
            rect=CGRectMake(parent.origin.x+parent.size.width-rect.size.width, rect.origin.y, rect.size.width, rect.size.height);
        }
    if([vAlign.lowercaseString isEqualToString:@"middle"])
    {
        rect=CGRectMake(rect.origin.x, centerpoint.y-rect.size.height/2, rect.size.width, rect.size.height);
    }
    
    return rect;
    
}

+(UIImage*)generateBarCode:(NSString*)barCodeStr width:(CGFloat)width height:(CGFloat)height
{
    //return nil;
    // 生成二维码图片
    CIImage *barcodeImage;
    NSData *data = [barCodeStr dataUsingEncoding:NSISOLatin1StringEncoding allowLossyConversion:false];
    CIFilter *filter = [CIFilter filterWithName:@"CICode128BarcodeGenerator"];
    
    [filter setValue:data forKey:@"inputMessage"];
    barcodeImage = [filter outputImage];
    
    // 消除模糊
    CGFloat scaleX = width / barcodeImage.extent.size.width; // extent 返回图片的frame
    CGFloat scaleY = height / barcodeImage.extent.size.height;
    CIImage *transformedImage = [barcodeImage imageByApplyingTransform:CGAffineTransformScale(CGAffineTransformIdentity, scaleX, scaleY)];
    CIContext *context = [CIContext contextWithOptions:nil];
    CGImageRef cgImage = [context createCGImage:transformedImage fromRect:[transformedImage extent]];
    
    UIImage* ret = [UIImage imageWithCGImage:cgImage];
    

    CGImageRelease(cgImage);
    
    return ret;
    
}

+(UIImage*)generateQRCode:(NSString*)barCodeStr width:(CGFloat)width height:(CGFloat)height
{
    {
        // 生成二维码图片
        CIImage *barcodeImage;
        NSData *data = [barCodeStr dataUsingEncoding:NSISOLatin1StringEncoding allowLossyConversion:false];
        CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
        
        [filter setValue:data forKey:@"inputMessage"];
        barcodeImage = [filter outputImage];
        
        // 消除模糊
        CGFloat scaleX = width / barcodeImage.extent.size.width; // extent 返回图片的frame
        CGFloat scaleY = height / barcodeImage.extent.size.height;
        CIImage *transformedImage = [barcodeImage imageByApplyingTransform:CGAffineTransformScale(CGAffineTransformIdentity, scaleX, scaleY)];
        
        CIContext *context = [CIContext contextWithOptions:nil];
        CGImageRef cgImage = [context createCGImage:transformedImage fromRect:[transformedImage extent]];
        
        UIImage* ret = [UIImage imageWithCGImage:cgImage];
        
        
        CGImageRelease(cgImage);
        
        return ret;
        
    }
}

+(NSString*) get_config_path
{
    NSString *default_path = [[NSBundle mainBundle] pathForResource:@"config" ofType:@"plist"];
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
    NSString *cache_folder=[paths objectAtIndex:0];
    
    NSString* ver=[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
    
    NSString *config_path = [cache_folder stringByAppendingPathComponent:[NSString stringWithFormat: @"config_%@.plist",ver]];
    BOOL bdir=NO;
    NSFileManager* fileManager = [NSFileManager defaultManager];
    if(!  [fileManager fileExistsAtPath:config_path isDirectory:&bdir])
    {
        NSError * error=nil;
        
        if(![fileManager copyItemAtPath:default_path toPath:config_path error:&error])
        {
            return nil;
        }
    }
    
    
   
    return config_path;
}
+ (CGRect)rectVAlign:(CGRect )parent rect:(CGRect)rect vAlign:(NSString*)vAlign
{
    //    double cx=parent.origin.x+parent.size.width/2;
    //    double cy=parent.origin.y+parent.size.height/2;
    CGPoint centerpoint= CGPointMake(parent.origin.x+parent.size.width/2,parent.origin.y+parent.size.height/2);
    
    if([vAlign.lowercaseString isEqualToString:@"middle"])
    {
        rect=CGRectMake(rect.origin.x, centerpoint.y-rect.size.height/2, rect.size.width, rect.size.height);
    }
    
    return rect;
    
}
+ (CGRect)scaleToSize:(CGRect )from to:(CGSize)to
{
    if(from.size.width/from.size.height>to.width/to.height)
    {
        return CGRectMake(from.origin.x, from.origin.y, to.width, to.width*from.size.height/from.size.width);
    }
    else
    {
        return CGRectMake(from.origin.x, from.origin.y, to.height*from.size.width/from.size.height, to.height);
    }
//    // 创建一个bitmap的context
//    // 并把它设置成为当前正在使用的context
//    UIGraphicsBeginImageContext(size);
//    // 绘制改变大小的图片
//    [img drawInRect:CGRectMake(0, 0, size.width, size.height)];
//    // 从当前context中创建一个改变大小后的图片
//    UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext();
//    // 使当前的context出堆栈
//    UIGraphicsEndImageContext();
//    // 返回新的改变大小后的图片
//    
//    //   NSData  *imageData=UIImageJPEGRepresentation(scaledImage, 1.f);
//    return scaledImage;
}
+ (UIImage *)scaleToSize:(UIImage *)img size:(CGSize)size{
    // 创建一个bitmap的context
    // 并把它设置成为当前正在使用的context
    UIGraphicsBeginImageContext(size);
    // 绘制改变大小的图片
    [img drawInRect:CGRectMake(0, 0, size.width, size.height)];
    // 从当前context中创建一个改变大小后的图片
    UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext();
    // 使当前的context出堆栈
    UIGraphicsEndImageContext();
    // 返回新的改变大小后的图片
    
    //   NSData  *imageData=UIImageJPEGRepresentation(scaledImage, 1.f);
    return scaledImage;
}

+(UIImage*)img_compress:(UIImage*)image kbsize:(float) size
{
    
    
    
    //UIImage *image=[UIImage imageNamed:@"xxoo.jpeg"];
    NSData  *imageData=UIImageJPEGRepresentation(image, 1.f);
    
    if(size>imageData.length/1024)
        return image;
    
    //   CGFloat size=40.f;// kb
    CGFloat scale=size/(imageData.length/1024);
    
    scale = sqrt (scale);
    
    CGSize newsize=image.size;
    newsize.height = newsize.height*scale;
    newsize.width = newsize.width*scale;
    
    return [RAUtils scaleToSize:image size:newsize];
    //    NSData *newData=UIImageJPEGRepresentation(image, scale);
    
    //    UIImage* ret= [[UIImage alloc] initWithData:newData];
    //
    //    return ret;
}

+(NSString*) FloatFormat:(float)value
{
    if (fmodf(value, 1)==0)
    {
        
        return [NSString stringWithFormat:@"%.0f",value];
        
    } else if (fmodf(value*10, 1)==0)
    {
        
        return [NSString stringWithFormat:@"%.1f",value];
        
    }
    else if (fmodf(value*100, 1)==0)
    {
        
        return [NSString stringWithFormat:@"%.2f",value];
        
    }
    else if (fmodf(value*1000, 1)==0)
    {
        
        return [NSString stringWithFormat:@"%.3f",value];
        
    }
    else
    {
        
        return [NSString stringWithFormat:@"%.4f",value];
        
        
    }
    return nil;
}


+(UIViewController*) getViewController:(UIView*) view
{
    for (UIView* next = [view superview]; next; next = next.superview) {
        UIResponder* nextResponder = [next nextResponder];
        if ([nextResponder isKindOfClass:[UIViewController class]]) {
            return (UIViewController*)nextResponder;
        }
    }
    return nil;
}

+ (float)fileSizeForDir:(NSString*)path//计算文件夹下文件的总大小
{
    NSFileManager *fileManager = [[NSFileManager alloc] init];
    float size =0;
    NSArray* array = [fileManager contentsOfDirectoryAtPath:path error:nil];
    for(int i = 0; i<[array count]; i++)
    {
        NSString *fullPath = [path stringByAppendingPathComponent:[array objectAtIndex:i]];
        BOOL isDir;
        if ( !([fileManager fileExistsAtPath:fullPath isDirectory:&isDir] && isDir) )
        {
            NSDictionary *fileAttributeDic=[fileManager attributesOfItemAtPath:fullPath error:nil];
            size+= fileAttributeDic.fileSize/ 1024.0/1024.0;
        }
        else
        {
            size+=[self fileSizeForDir:fullPath];
        }
    }
    return size;
}
+(NSDictionary*) error_dict:(NSError*)error
{
    if(error==nil)
        return nil;
    NSMutableDictionary* ret = [[NSMutableDictionary alloc] init];
    [ret setValue:[NSString stringWithFormat:@"%d",error.code] forKey:@"error_code"];
    [ret setValue:error.domain forKey:@"err_domain"];
    [ret setValue:[error localizedDescription] forKey:@"err_message"];
    // [ret setObject:error.userInfo forKey:@"user_info"];
    return ret;
}
+(NSString*) current_date
{
    NSDate * date = [NSDate date];
    NSTimeInterval sec = [date timeIntervalSinceNow];
    NSDate * currentDate = [[NSDate alloc] initWithTimeIntervalSinceNow:sec];
    
    NSDateFormatter * df = [[NSDateFormatter alloc] init ];
    [df setDateFormat:@"MM/dd/yyyy HH:mm:ss"];
    NSString * na = [df stringFromDate:currentDate];
    return na;
}
+(void) message_alert :(NSString*) msg title:(NSString*) title controller:(UIViewController*) vc
{
    if(title==nil)
        title = @"Message";
    
    
    return [self alert_view:msg title:title];
    
    
    UIAlertController *alertControl = [UIAlertController alertControllerWithTitle:title message:nil preferredStyle:UIAlertControllerStyleAlert];
    //block代码块取代了delegate
    
    
    //        [alertControl addTextFieldWithConfigurationHandler:^(UITextField *textField) {
    //            textField.text = self.save_name;
    //
    //
    //        }];
    
    //    UIAlertAction *actionOne = [UIAlertAction actionWithTitle:@"Yes" style:UIAlertActionStyleDestructive handler:^(UIAlertAction *action) {
    //
    //        UIAlertView * waitalert = [RAUtils waiting_alert:@"Please wait" title:@"Delete Order"];
    //        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    //
    //            NSDictionary* return_json = [iSalesNetwork delete_Order:orderid];
    //
    //            dispatch_async(dispatch_get_main_queue(), ^{
    //                [waitalert dismissWithClickedButtonIndex:0 animated:FALSE];
    //
    //
    //                if([[return_json valueForKey:@"result"] intValue]==2)
    //                {
    //
    //                    [RAUtils error_alert:nil title:@"Order Delete"] ;
    //                }
    //                else
    //                {
    //                    [RAUtils error_alert:[return_json valueForKey:@"err_msg"] title:@"Delete Order Failed."] ;
    //                }
    //
    //
    //
    //
    //            });
    //        });
    //
    //
    //    }];
    
    UIAlertAction *alertthree = [UIAlertAction actionWithTitle:@"Ok" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {
        //DebugLog(@"Cancel");
    }];
    // [alertControl addAction:actionOne];
    
    [alertControl addAction:alertthree];
    
    
    UIAlertAction *alertcancel = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {
    }];
    [alertControl addAction:alertcancel];
    //UIAlertControllerStyle类型为UIAlertControllerStyleAlert可以添加addTextFieldWithConfigurationHandler:^(UITextField *textField)
    
    
    
    
    [vc presentViewController:alertControl animated:YES completion:nil];
    
    
    
    return;
    
    
    
    
}


+(void) alert_view :(NSString*) msg title:(NSString*) title
{
    if(title==nil)
        title = @"Message";
    if(msg.length>0)
    {
        title=[NSString stringWithFormat:@"%@\n\n%@",title,msg];
    }
    UIAlertView * alert = [[UIAlertView alloc] initWithTitle: title message:nil delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
    [alert show];
}
+ (long long) freeDiskSpaceInMegaBytes{
    struct statfs buf;
    long long freespace = -1;
    if(statfs("/var", &buf) >= 0){
        freespace = (long long)(buf.f_bsize * buf.f_bfree);
    }
    DebugLog(@"手机剩余存储空间为：%qi MB" ,freespace/1024/1024);
    return freespace/1024/1024;
}
+(UIAlertView * ) waiting_alert :(NSString*) msg title:(NSString*) title
{
    if(title==nil)
        title = @"Please Wait";
    if(msg==nil)
        msg= @"Waiting...";
    NSAssert(msg!=nil, @"error message from json is nil");
    UIAlertView * alert = [[UIAlertView alloc] initWithTitle:title message:msg delegate:nil cancelButtonTitle:nil otherButtonTitles:nil, nil];
    [alert show];
    //
    //
    //    UIActivityIndicatorView *aiView = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(125.0, 80.0, 30.0, 30.0)];
    //    aiView.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhiteLarge;
    // //   check if os version is 7 or above. ios7.0及以上UIAlertView弃用了addSubview方法
    ////    if ([[[UIDevice currentDevice] systemVersion] compare:@"7.0"] != NSOrderedAscending) {
    ////        [alert setValue:aiView forKey:@"accessoryView"];
    ////    }else{
    ////        [alert addSubview:aiView];
    ////    }
    //
    //    aiView.hidden = false;
    //    aiView.hidesWhenStopped = false;
    //    [aiView startAnimating];
    //
    //[alert addSubview:aiView];
    
    return alert;
    //return nil;
    // return alert;
    //        UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"Error!" message:@"User&Password can not be empty!" delegate:nil cancelButtonTitle:NSLocalizedString(@"ok", nil) , nil];
    //[alert show];
}
+(NSDictionary*) device_info
{
    
    
    NSDictionary* infoDict =[[NSBundle mainBundle] infoDictionary];
    NSString* build =[infoDict objectForKey:@"CFBundleVersion"];
    NSString* version =[infoDict objectForKey:@"CFBundleShortVersionString"];
    NSString* versionNum = [NSString stringWithFormat:@"Version: %@ Build %@",version,build];
    
    NSMutableDictionary * info = [[NSMutableDictionary alloc]init];
    [info setValue:[[UIDevice currentDevice] name] forKey:@"name"];
    [info setValue:[[UIDevice currentDevice] systemVersion] forKey:@"systemVersion"];
    [info setValue:[[UIDevice currentDevice] model] forKey:@"model"];
    [info setValue:versionNum forKey:@"ver"];
    [info setValue:[[UIDevice currentDevice] localizedModel] forKey:@"localizedModel"];
    
    return info;
    //    [info setValue:[[UIDevice currentDevice] name] forKey:@"name"];
    //    [info setValue:[[UIDevice currentDevice] name] forKey:@"name"];
    //    [info setValue:[[UIDevice currentDevice] name] forKey:@"name"];
    
}

+(NSArray*) string2arr:(NSString*) string separator:(NSString*)separator
{
    NSArray  *stringArray = [string componentsSeparatedByString:separator];
    
    return stringArray;
}
+(NSString*) arr2string:(NSArray *) arr separator:(NSString*)separator trim:(bool) btrim
{
    if(arr.count==0)
        return nil;
    NSMutableArray * marr = [arr mutableCopy];
    
begin:
    for (NSString* item in marr) {
        if(item.length==0 )
            if( btrim)
            {
                
                [marr removeObject:item];
                goto begin;
            }
        
    }
    NSString * ret = [marr componentsJoinedByString:separator];
    return ret;
}
+(NSString*) arr2string:(NSArray *) arr separator:(NSString*)separator trim:(bool) btrim brackets:(NSString*)brackets
{
    if(brackets!=nil)
        separator = [NSString stringWithFormat:@"%@%@%@",brackets,separator,brackets];
    NSMutableArray * marr = [arr mutableCopy];
begin:
    for (NSString* item in marr) {
        if(item.length==0 )
            if( btrim)
            {
                
                [marr removeObject:item];
                goto begin;
            }
        
        
        
    }
    NSString * ret = [marr componentsJoinedByString:separator];
    
    if(brackets!=nil)
        ret = [NSString stringWithFormat:@"%@%@%@",brackets,ret,brackets];
    
    return ret;
}
+(NSDictionary*) string2dict:(NSString*) str
{
    
    if(str==nil)
        return nil;
    NSError *error = nil;
    NSDictionary *string2dic = [NSJSONSerialization JSONObjectWithData: [str dataUsingEncoding:NSUTF8StringEncoding]
                                                               options: NSJSONReadingMutableContainers
                                                                 error: &error];
    DebugLog(@"%@",string2dic);
    return string2dic;
}
+(UIColor*) strColor:(NSString*) color
{
    if([color.lowercaseString isEqualToString:@"red"])
        return [UIColor redColor];
    
    return [UIColor blackColor];
}
+(NSData*) dict2data:(NSDictionary*) dict
{
    if(dict==nil)
        return nil;
    // 将NSDictionary转化为NSData
    NSData *data = [NSJSONSerialization dataWithJSONObject:dict options:kNilOptions error:nil];
    return data;
}
+(NSString*) dict2string:(NSDictionary*) dict
{
    
    if(dict==nil)
        return nil;
    
    // 将NSDictionary转化为NSData
    NSData *data = [NSJSONSerialization dataWithJSONObject:dict options:kNilOptions error:nil];
    
    // 再将NSData转为字符串
    NSString *jsonStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    
    return jsonStr;
}
+(NSString*) base64en:(NSString*) string
{
    
    if(string == nil)
        
        return nil;
    
    NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
    NSString *stringBase64 = [data base64EncodedStringWithOptions:0]; // base64格式的字符串
    
    return stringBase64;
}


+(NSString*) base64de:(NSString*) stringBase64
{
    
    if(stringBase64==nil)
        return nil;
    NSData *data = [[NSData alloc] initWithBase64EncodedString:stringBase64 options:NSDataBase64DecodingIgnoreUnknownCharacters];
    NSString *string =[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    return string;
}
+(void) deletefiles :(NSString*) path
{
    
    //    NSString *extension = @"m4r";
    NSFileManager *fileManager = [NSFileManager defaultManager];
    //    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    //    NSString *documentsDirectory = [paths objectAtIndex:0];
    
    NSArray *contents = [fileManager contentsOfDirectoryAtPath:path error:NULL];
    NSEnumerator *e = [contents objectEnumerator];
    NSString *filename;
    while ((filename = [e nextObject])) {
        
        bool result=  [fileManager removeItemAtPath:[path stringByAppendingPathComponent:filename] error:NULL];
        
        if(!result)
            DebugLog(@"delete file failed %@------%@",path,filename);
    }
}
+(NSMutableArray*)dictionary2array:(NSDictionary*)json count_fields:(NSString*) count_fields item_mark:(NSString*) item_mark items_mark:(NSString* )items_mark
{
    if(json==nil)
        return nil;
    NSMutableArray* ret = [[NSMutableArray alloc] init];
    
    int count = [[json valueForKey:count_fields] intValue];
    
    NSDictionary* items = nil;
    if(items_mark==nil)
        items = json;
    else
        items = [json objectForKey:items_mark];
    for(int i=0;i<count;i++)
    {
        NSDictionary* obj = [items objectForKey:[NSString stringWithFormat:@"%@%d",item_mark,i]];
        [ret addObject:obj];
    }
    return ret;
}
+(NSDictionary*) error_json :(int)code err_msg:(NSString*)msg
{
    
    NSMutableDictionary* ret = [[NSMutableDictionary alloc] init];
    //#define RESULT_FALSE 0
    //#define RESULT_TRUE		 2
    //#define RESULT_NET_ERROR			 -3
    //#define RESULT_NET_NOTAVAILABLE		  -4
    //#define RESULT_ERROR				 -5
    //#define RESULT_LOCALFILE_ERROR			 -7
    //#define RESULT_USERAUTH_ERROR			 -9
    //#define RESULT_UPDATE_USERAUTH_ERROR	 -11
    //#define RESULT_SESSION_EXPIRED			  -13
    //#define RESULT_VER_LOW
    
    if(msg.length<=0)
    {
        switch (code) {
            case RESULT_NET_NOTAVAILABLE:
                msg= MSG_NET_NOTAVAILABLE;
                break;
                
            default:
                // assert(@"UNDEFINE ERROR CODE!");
                break;
        }
    }
    //    if(code==RESULT_NET_NOTAVAILABLE)
    //        [ret setValue:[NSString stringWithFormat:@"%d",RESULT_NET_ERROR] forKey:@"result"];
    //    else
    [ret setValue:[NSString stringWithFormat:@"%d",code] forKey:@"result"];
    [ret setValue:msg forKey:@"err_msg"];
    
    //    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:ret
    //                                                       options:0
    //                                                         error:nil];
    
    return ret;
}
+ (CGRect)relativeFrameForScreenWithView:(UIView *)v
{
    UIWindow * window=[[[UIApplication sharedApplication] delegate] window];
    CGRect rect=[v convertRect: v.bounds toView:window];
    return rect;
    
    
    //    BOOL iOS7 = [[[UIDevice currentDevice] systemVersion] floatValue] >= 7;
    //
    //    CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height;
    //    if (!iOS7) {
    //        screenHeight -= 20;
    //    }
    //    UIView *view = v;
    //    CGFloat x = .0;
    //    CGFloat y = .0;
    //    while (view.frame.size.width != 320 || view.frame.size.height != screenHeight) {
    //        x += view.frame.origin.x;
    //        y += view.frame.origin.y;
    //        view = view.superview;
    //        if ([view isKindOfClass:[UIScrollView class]]) {
    //            x -= ((UIScrollView *) view).contentOffset.x;
    //            y -= ((UIScrollView *) view).contentOffset.y;
    //        }
    //    }
    //    return CGRectMake(x, y, v.frame.size.width, v.frame.size.height);
}


@end




