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

#import "DetailViewController.h"
#import "DetailHeaderCell.h"
#import "DetailImageCell.h"
#import "iSalesNetwork.h"

#import "RTLabel.h"
#import "DetailKVCell.h"
#import "LineView.h"

//#import "SelectorViewController.h"

#import "RAUtils.h"
#import "MainViewController.h"
#import "QRCodeGenerator.h"
#import "DefaultTableHeaderView.h"
#import "DefaultAppearance.h"
#import "JKMessageBoxController.h"

#import "CartUtils.h"

#define  DEF_CELL_HEIGHT 44
#define  DEF_TABLE_HEIGHT 44
#define  LINE_WIDTH 0
#define  CELL_MARGIN 0
#define  LABEL_MARGIN 10


#define SCREEN_WIDTH ([UIScreen mainScreen].bounds.size.width)
#define SCREEN_HEIGHT ([UIScreen mainScreen].bounds.size.height)
#define NavColor ([UIColor colorWithRed:237/255.0 green:20/255.0f blue:91/255.0f alpha:1.0f])

@interface DetailViewController ()
@property (nonatomic,strong) UIBezierPath *path;

@end




@implementation DetailViewController
{
        CALayer     *_layer;
}
-(void) reload_container_getdata:(bool) update_data
{
    
    [super reload_container_getdata:update_data];
    if(update_data)
        [self reload];
    else
    {
        [self.detailTable reloadData];
//        [self refresh_total];
    }
}

-(void)manually_refresh
{
    UIRefreshControl *reF = (UIRefreshControl *)[self.view viewWithTag:300];
    
    if(self.isrefreshing)
    {
        [reF endRefreshing];
        return;
    }
    
    reF.attributedTitle = [[NSAttributedString alloc]initWithString:@"Refreshing"];
    if ([self respondsToSelector:@selector(ReloadData)])
    [self performSelector:@selector(ReloadData) withObject:nil afterDelay:1];
    //    DebugLog(@"refresh!!!!!!!!");
    
}
-(void) ReloadData
{
    UIRefreshControl *reF = (UIRefreshControl *)[self.view viewWithTag:300];
    
    [reF endRefreshing];
    
    reF.attributedTitle = [[NSAttributedString alloc]initWithString:@"Pull to refresh"];
    [self reload];
    
    
}

-(void) reload
{
dispatch_async(dispatch_get_main_queue(), ^{
    
    
    
   
    
    if(self.isrefreshing)
        return;

    self.label_net_err.hidden=true;
    self.detailTable.hidden = true;
    self.isrefreshing=true;
    self.mum.center = self.view.center;
    self.mum.hidden = false;
    [self.mum startAnimating];
    
    //self.detailTable.hidden=true;
    
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        
        NSDictionary* detail_json = [iSalesNetwork request_ItemDetail:self.product_id model_name:self.model_name category_id:self.category_id use_name:self.use_model_name];
        
        dispatch_async(dispatch_get_main_queue(), ^{
            [self.mum stopAnimating];
            self.detail_data = [detail_json mutableCopy];
            self.product_id = [NSString stringWithFormat:@"%d",[[detail_json valueForKey:@"product_id"] intValue] ];
            NSDictionary* imgsection = [detail_json objectForKey:@"img_section"];
            //          AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
            if(/*appDelegate.user_type==USER_ROLE_CUSTOMER*/true)
                self.quantity =[[imgsection valueForKey:@"stockUom"] intValue];
            else
                self.quantity =1;
            
            if(self.quantity==0)
                self.quantity=1;
            self.step=self.quantity;
            [self.detailTable reloadData];
            
            if([[detail_json valueForKey:@"result"] intValue]==2)
            {
                self.detailTable.hidden = false;
                
                NSString* model_name = self.detail_data[@"img_section"][@"model_name"];
                
                 NSString* img_url = self.detail_data[@"img_section"][@"model_s_img"];
                
                
                NSMutableDictionary* item = [[NSMutableDictionary alloc]init];
                [item setValue:self.product_id forKey:@"product_id"];
                [item setValue:self.category_id forKey:@"category"];
                [item setValue:model_name forKey:@"fash_name"];
                [item setValue:img_url forKey:@"picture_path"];
                
                [CartUtils add_recent_model:item];
                
                NSUInteger ii[2] = {0,0};
                
                [self.detailTable  scrollToRowAtIndexPath:[NSIndexPath indexPathWithIndexes:ii length:2] atScrollPosition:UITableViewScrollPositionTop animated:YES];
                
                
//                AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
//                int count=[appDelegate.recent_model[@"count"] intValue];
//                bool bexist = false;
//                for(int i=0;i<count;i++)
//                {
//                    NSMutableDictionary * mitem= appDelegate.recent_model[[NSString stringWithFormat:@"item_%d",i]];
//                    if([mitem[@"product_id"] isEqualToString:self.product_id])
//                    {
//                        bexist=true;
//                        break;
//                    }
//                }
//                
//                if(!bexist)
//                {
//                [appDelegate.recent_model setObject:item forKey:[NSString stringWithFormat:@"item_%d",count]];
//                appDelegate.recent_model[@"count"]=[NSString stringWithFormat:@"%d",count+1];
//                }

            }
            else
                if([[detail_json valueForKey:@"result"] intValue]==RESULT_NET_ERROR)
                {
                    self.detailTable.hidden = true;
                    self.label_net_err.hidden=false;
                }
            else if([[detail_json valueForKey:@"result"] intValue]==RESULT_NO_MODEL)
            {
                self.detailTable.hidden = true;
                                [RAUtils message_alert:[detail_json valueForKey:@"err_msg"] title:@"Model Detail"/*@"Loading Model Detail Failed."*/ controller:self] ;
                if(self.ispush)
                  [ self.navigationController popViewControllerAnimated:true];
            }
            else
            {
                [RAUtils message_alert:[detail_json valueForKey:@"err_msg"] title:@"Model Detail"/*@"Loading Model Detail Failed."*/ controller:self] ;
            }
            
self.isrefreshing=false;
            
        });
    });
        });
}
- (void)onBackClick:(UIButton *)sender {
    
    if(self.OnBack)
    {
        self.OnBack(self.add_cart,self.add_wish,self.update_data);
    }
    [self.navigationController popViewControllerAnimated:(false)];

    //    [self.navigationController dismissViewControllerAnimated:true completion:^{
    //        ;
    //    }];
}
- (void)viewDidLoad {
    
    
    [super viewDidLoad];
    
    [self registeObserver];
    self.refresh_type =  REFRESH_VIEW;
    
    UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithImage:[[UIImage imageNamed:@"back"] imageWithRenderingMode:UIImageRenderingModeAutomatic]
                                                                    style:UIBarButtonItemStylePlain
                                                                   target:self
                                                                   action:@selector( onBackClick:)];
    

    
    self.navigationItem.leftBarButtonItem = backButton;
    
    
    
  //  self.detailTable.style = UITableViewStylePlain;
    
    self.edgesForExtendedLayout = UIRectEdgeNone;
    
    
     if(self.ispush)
     {
    UIView *line = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0.000001)];
    [line setBackgroundColor:[UIColor clearColor]];
    self.detailTable.tableHeaderView = line;
     }
//    
//    
//    self.automaticallyAdjustsScrollViewInsets = false;
    self.step=1;
    self.quantity=1;
    
    
    
    UIRefreshControl *ref = [[UIRefreshControl alloc]init];
    ref.tag = 300 ;
    ref.attributedTitle = [[NSAttributedString alloc]initWithString:@"Pull to refresh"];
    ref.tintColor = [UIColor colorWithRed:0.10 green:0.68 blue:0.94 alpha:0.7];
    //    ref.hidden = true;
    [ref addTarget:self action:@selector(manually_refresh) forControlEvents:UIControlEventValueChanged];
    [self.detailTable addSubview:ref];
    
    
    self.label_net_err.layer.borderColor = [UIColor darkGrayColor].CGColor;
    self.label_net_err.layer.borderWidth = 2.0;
    self.label_net_err.layer.cornerRadius=15;
    self.label_net_err.layer.masksToBounds=true;
    
    
    
    
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(refresh_btn_click:)];
    //            tap.minimumPressDuration = 0.8; //定义按的时间
    [self.label_net_err addGestureRecognizer:tap];
    

    // Do any additional setup after loading the view.
}
- (void)viewWillAppear:(BOOL)animated
{
    if(self.ispush)
    {
        [super viewWillAppear:animated];
       [[self navigationController] setNavigationBarHidden:NO animated:NO];
        
    }
}
- (void) viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    if(self.ispush)
        [[self navigationController] setNavigationBarHidden:YES animated:NO];
    
}
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

/*
#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
}
*/
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    
    //将page2设定成Storyboard Segue的目标UIViewController
    id page2 = segue.destinationViewController;
    
    //将值透过Storyboard Segue带给页面2的string变数
    [page2 setValue: _selector  forKey:@"selector"];
     [page2 setValue: self  forKey:@"selectordelegate"];
    
    
    
}
//- (IBAction)OnAddPortfolio:(id)sender {
////        AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
////    
////    [appDelegate test_onDecodedDataResult:@"371252"];
////        [self onDecodedData:@"3712524-235"];
//        return;
//}
-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
//    [self.detailTable reloadData];
//    return;
    [super didRotateFromInterfaceOrientation:fromInterfaceOrientation];
    
//    NSMutableIndexSet *sectionToReload =  [[NSMutableIndexSet alloc] init];
//        int section_count =[[self.detail_data valueForKey:@"detail_section_count"] intValue];
//    
//    for(int i=0;i<section_count;i++)
//    {
//        NSDictionary* section_json = [self.detail_data objectForKey:[NSString stringWithFormat:@"detail_%ld",(long)i]];
//        
//       
//        
//        NSString* type=[section_json valueForKey:@"type"] ;
//        
//        if([type isEqualToString:@"kv"])
//        {
//
//            [sectionToReload addIndex:i+1];
//        }
//    }
//    
//
//    [self.detailTable reloadSections:sectionToReload withRowAnimation:UITableViewRowAnimationNone];
//    

    [self.detailTable reloadData];
    
    
    
}
#pragma mark - Selector delegate
-(void) selected:(NSString*) detail_id category:(NSString*) category
{
    self.product_id = detail_id;
    self.use_model_name = false;
    [self reload];
    DebugLog(@"color selected");

}


#pragma mark - Header cell delegate
-(void) SelectorClicked:(UIView*) trigger
{
//    int selcount = [[self.selector valueForKey:@"count"] intValue];
    
    
    
    
    int selector_count = [[self.selector valueForKey:@"count"] intValue];
    
  
    int current_sel = -1;
    for(int i=0;i<selector_count;i++)
    {
        NSDictionary* params_json=[[self.selector objectForKey:[NSString stringWithFormat:@"item_%d",i]] objectForKey:@"params"] ;
        
        //          NSString* aaa=[[[params_json objectForKey:@"param_0"] valueForKey:@"val"] stringValue];
        
        
        
        if([[[[params_json objectForKey:@"param_0"] valueForKey:@"val"] stringValue] isEqualToString:self.product_id])
        {
 
            current_sel = i;
        }
    }
    
    
//    NSArray * arr = [[NSArray alloc] init];
//    arr = [NSArray arrayWithObjects:@"Hello 0", @"Hello 1", @"Hello 2", @"Hello 3", @"Hello 4", @"Hello 5", @"Hello 6", @"Hello 7", @"Hello 8", @"Hello 9",nil];
//    NSArray * arrImage = [[NSArray alloc] init];
//    arrImage = [NSArray arrayWithObjects:[UIImage imageNamed:@"apple.png"], [UIImage imageNamed:@"apple2.png"], [UIImage imageNamed:@"apple.png"], [UIImage imageNamed:@"apple2.png"], [UIImage imageNamed:@"apple.png"], [UIImage imageNamed:@"apple2.png"], [UIImage imageNamed:@"apple.png"], [UIImage imageNamed:@"apple2.png"], [UIImage imageNamed:@"apple.png"], [UIImage imageNamed:@"apple2.png"], nil];
    if(self.dropDown == nil)
    {
        CGFloat height = 70*selector_count;
        self.dropDown =[[NIDropDown alloc] showDropDown:self.detailTable based:(id)trigger height:height data:self.selector direction:@"down" current_sel:current_sel];
        
        
        //Capturing strongly  warring;
        __block DetailViewController *brself= self;
        
        self.dropDown.selectChanged =^(long index){
            
            
            NSDictionary* item = [brself.selector objectForKey:[NSString stringWithFormat:@"item_%ld",index]];
            
            NSDictionary* params = [item objectForKey:@"params"];
            
            NSString* detail_id=[[[params objectForKey:@"param_0"] valueForKey:@"val" ] stringValue];
            
            
            brself.product_id = detail_id;
            brself.use_model_name = false;
            [brself reload];
            DebugLog(@"color selected");
            brself.dropDown = nil;
            
            
            
        };
        //[[NIDropDown alloc]showDropDown:(id)trigger :&f :arr :arrImage :@"down"];
       // self.dropDown.delegate = self;
    }
    else {
        [self.dropDown hideDropDown:(id)trigger];
        self.dropDown= nil;
      //  [self rel];
    }
    
    return;
    
    
    /*
//    CGRect rect = trigger.frame;
//    
//    DebugLog(@"%@",NSStringFromCGRect(rect));
//    
//    
//    
//    DebugLog(@"%@",NSStringFromCGPoint (trigger.center));
//    
//    
//    CGRect new=[trigger convertRect:rect toView:self.view];
//    
//    DebugLog(@"convert %@",NSStringFromCGRect(new));
//    
    CGRect cellrect_screen = [RAUtils relativeFrameForScreenWithView:trigger];
    
    
    CGRect rect1=[self.view convertRect:cellrect_screen fromView:[[[UIApplication sharedApplication] delegate] window]];
    
    DebugLog(@"convert1 %@",NSStringFromCGRect(rect1));
    SelectorViewController *menu = [ self.storyboard instantiateViewControllerWithIdentifier:@"SelectorViewController"];
    NSString * name = [self.selector valueForKey:@"name"];
    menu.title=name;
    menu.selector = self.selector;
    
    menu.selectordelegate = self;
    
    // 1.创建一个UIPopover
    UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:[[UINavigationController alloc] initWithRootViewController:menu]];
    
   
    // 2.设置尺寸
    //    popover.popoverContentSize = CGSizeMake(320, 44 * 5);
    
    // 3.从哪里显示出来 --> 指向item
    
    [popover presentPopoverFromRect:rect1   inView:self.view permittedArrowDirections:0 animated:YES];
  //  [popover presentPopoverFromBarButtonItem:item permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
    
    self.popover = popover;
    
    // [self performSegueWithIdentifier:@"selector_popover" sender:self];
     */
}
-(void) stepClicked:(int) value
{
    self.quantity = value;
}

#pragma mark - Topic cell delegate
-(void) TopicItemClicked:(NSString*) product_id category:(NSString*) category
{
//    DetailViewController* dvc = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailViewController" ];
//    //            dvc
//    
//    
//    dvc.OnBack=^(bool add_cart,bool add_wish,bool update_data)
//    {
//        
//        
//    [self reload_container_getdata:false]
//    };
//    
//    
//    dvc.product_id=product_id;
//    dvc.category_id=category;
//    dvc.ispush=true;
//    [dvc reload];
//    [self.navigationController pushViewController:dvc animated:true];
    
    
    
   // self.model_name = value;
    self.product_id = product_id;
    self.category_id=category;
    [self reload];
    DebugLog(@"color selected");
}

#pragma mark - Table view data source

//- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
//{
//    return 0;
//}
//- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
//{
//    return 0;
//}
//- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
//{
//        UIView* myView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, 0.0001)];
//    return myView;
//
//}
//- (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
//{
//    UIView* myView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, 0.0001)];
////    myView.backgroundColor = [UIColor colorWithRed:0.10 green:0.68 blue:0.94 alpha:0.7];
////    UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, 90, 22)];
////    titleLabel.textColor=[UIColor whiteColor];
////    titleLabel.backgroundColor = [UIColor clearColor];
////    if(section==0)
////        titleLabel.text=NSLocalizedString(@"display_items", nil);
////    else
////        titleLabel.text=NSLocalizedString(@"hide_items", nil);
////    [titleLabel sizeToFit];
////    [myView addSubview:titleLabel];
////
//    return myView;
//}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
    if(section==0)
        return nil;
    
    NSDictionary* related_json = [self.detail_data objectForKey:@"related_model"];
    if(related_json==nil)
    {
        NSDictionary* section_json = [self.detail_data objectForKey:[NSString stringWithFormat:@"detail_%ld",(long)(section-1)]];
        return [section_json valueForKey:@"title"] ;
    }
    else
    {
        if(section==1)
            return @"related model";
        else
        {
            NSDictionary* section_json = [self.detail_data objectForKey:[NSString stringWithFormat:@"detail_%ld",(long)section-2]];
            return [section_json valueForKey:@"title"] ;
        }
    }
}

//- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
//{
//    return 33;
//}
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    

    
    NSString* value =[DefaultAppearance get_noneappearance_value:@"DefaultTableHeaderView" valuename:@"title_text_color"];
    
    if(value==nil)
        value=@"";
    unsigned long color = strtoul([value UTF8String],0,16);
    
    NSString *sectionTitle = [self tableView:tableView titleForHeaderInSection:section];
    if (sectionTitle == nil) {
        return nil;
    }
    
    
    DefaultTableHeaderView* myView = [[DefaultTableHeaderView alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, 0.0001)];
   // myView.backgroundColor =  UIColorFromRGB(0x996633);
    myView.layer.shadowPath =[UIBezierPath bezierPathWithRect:myView.bounds].CGPath;
    myView.layer.shadowColor = [UIColor blackColor].CGColor;
    myView.layer.shadowOffset = CGSizeMake(0, 0);
    myView.layer.shadowOpacity = 0.5;
    myView.layer.shadowRadius = 2.0;
    
    UILabel *titlelabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 5.5, 90, 22)];
    titlelabel.textColor=UIColorFromRGB(color);
  //  titlelabel.backgroundColor = [UIColor clearColor];
    titlelabel.text=sectionTitle;
    [titlelabel sizeToFit];
    
    
    
    NSDictionary* section_json = [self.detail_data objectForKey:[NSString stringWithFormat:@"detail_%ld",(long)(section-1)]];
    bool refresh= [[section_json valueForKey:@"partial_refresh"] boolValue] ;
    
    
    if(refresh)
    {
    NSString* btntitle=@"Refresh" ;

//        NSString* value =[DefaultAppearance get_noneappearance_value:@"DetailTableHeaderView" valuename:@"refresh_button_color"];
//        
//        if(value==nil)
//        value=@"";
//        unsigned long color = strtoul([value UTF8String],0,16);
    
        
    
    UIButton * btn =[[UIButton alloc] initWithFrame:CGRectMake(tableView.bounds.size.width-100-15, 0, 100, 33)];
        
        
      //  [btn setTitleColor:UIColorFromRGB(color) forState:UIControlStateNormal];
        btn.contentHorizontalAlignment=UIControlContentHorizontalAlignmentRight;
    btn.tag=section;
    [btn addTarget:self action:@selector(RefreshSection:) forControlEvents:UIControlEventTouchUpInside];
    [btn setTitle:btntitle forState:UIControlStateNormal];
    [myView addSubview:btn];
    }
    
    [myView addSubview:titlelabel];

    
    return myView;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{


    int section_count =[[self.detail_data valueForKey:@"detail_section_count"] intValue];
    NSDictionary* related_json = [self.detail_data objectForKey:@"related_model"];
    if(related_json==nil)
        return  section_count+1;
    else
        return section_count+2;
}
//- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
//{
//    DebugLog(@"canMoveRowAtIndexPath");
//
//    if([tableView numberOfRowsInSection:indexPath.section]>1)
//        return true;
//    else
//        return false;
//}
//- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath
//{
//    NSMutableArray * from;
//    NSMutableArray * to ;
//    if(fromIndexPath.section==0)
//        from  = self.displayfields;
//    else
//        from  = self.hidefields;
//    if(toIndexPath.section==0)
//        to  = self.displayfields;
//    else
//        to  = self.hidefields;
//    id content=from[fromIndexPath.row];
//    [from removeObjectAtIndex:fromIndexPath.row];
//    [to insertObject:content atIndex:toIndexPath.row];
//
//    [tableView reloadData];
//
//}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    
    if(section==0)
        return 1;
    NSDictionary* related_json = [self.detail_data objectForKey:@"related_model"];
    if(related_json==nil)
    {
        NSDictionary* section_json = [self.detail_data objectForKey:[NSString stringWithFormat:@"detail_%ld",(long)section-1]];
        NSString* type=[section_json valueForKey:@"type"] ;
        if([type isEqualToString:@"content"])
            return 1;
        return [[section_json valueForKey:@"count"] intValue];
    }
    else
    {
        if(section==1)
            return 1;
        else
        {
            NSDictionary* section_json = [self.detail_data objectForKey:[NSString stringWithFormat:@"detail_%ld",(long)section-2]];
            NSString* type=[section_json valueForKey:@"type"] ;
            if([type isEqualToString:@"content"])
                return 1;
            return [[section_json valueForKey:@"count"] intValue];
        }
    }
    
    
    
}
//- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
//{
//    return UITableViewCellEditingStyleNone;
//}

//- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
//{
//    //如果两次点击的时间间隔小于1秒，则断定为双击事件
//
//    if(tableView.editing==false)
//        return;
//
//
//    if([tableView numberOfRowsInSection:indexPath.section]<=1)
//        return;
//    //    int between = 1;
//    NSUInteger curr = [[NSDate date] timeIntervalSince1970];
//
//    if(indexPath.row==self.lasttap.row&&indexPath.section==self.lasttap.section)
//    {
//        if (curr-self.taptime<1) {
//            DebugLog(@"double click!");
//            self.lasttap =nil;
//
//            NSMutableArray * from;
//            NSMutableArray * to ;
//            int section;
//            if(indexPath.section==0)
//            {
//                from  = self.displayfields;
//                to = self.hidefields;
//                section = 1;
//            }
//            else
//            {
//
//                from  = self.hidefields;
//                to = self.displayfields;
//                section = 0;
//            }
//            NSIndexPath * toIndexPath = [NSIndexPath indexPathForRow:0 inSection:section];
//            //            NSIndexPath * headerIndexPath = [NSIndexPath indexPathForRow:0 inSection:indexPath.section];
//            //            NSIndexPath * headerIndexPath1 = toIndexPath;
//
//            id content=from[indexPath.row];
//            [tableView beginUpdates];
//            [from removeObjectAtIndex:indexPath.row];
//            [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
//
//            [to insertObject:content atIndex:0];
//            [tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:toIndexPath] withRowAnimation:UITableViewRowAnimationFade];
//            [tableView endUpdates];
//
//            //            [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:headerIndexPath] withRowAnimation:UITableViewRowAnimationFade];
//            //            [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:headerIndexPath1] withRowAnimation:UITableViewRowAnimationFade];
//            [tableView reloadData];
//
//
//        }
//        self.taptime = curr;
//
//
//    }
//    else
//    {
//        self.taptime = curr;
//        self.lasttap = indexPath;
//    }
//}

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if(section ==0)
        return 0;
    else
        return 33;
}




- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
{
    if(indexPath.section ==0)
        return 550;
    
    NSDictionary* nsdic = self.detail_data;
    NSDictionary* related_json = [self.detail_data objectForKey:@"related_model"];
    if(related_json==nil)
    {
        NSDictionary* section_json = [self.detail_data objectForKey:[NSString stringWithFormat:@"detail_%ld",(long)indexPath.section-1]];
        
        NSDictionary* item_json =[section_json objectForKey:[NSString stringWithFormat:@"item_%ld",(long)indexPath.row ]];
        
        NSString* type=[section_json valueForKey:@"type"] ;
        
        if([type isEqualToString:@"kv"])
        {
            float width = tableView.frame.size.width;
            width-=CELL_MARGIN*2;
            CGSize constraintkey = CGSizeMake(width*0.4-2*LABEL_MARGIN, 20000.0f);//key label width is 40% cell width;
            CGSize constraintval = CGSizeMake(width*0.6-2*LABEL_MARGIN, 20000.0f);//val label width is 60% cell width;
            
            
            
            //  NSDictionary* item = [self.content get_item_seg:indexPath.section row:indexPath.row];
            NSString* key =[item_json valueForKey:@"key"] ;
            
            //   [cell.keyLabel sizeToFit];
            NSString* val=[item_json valueForKey:@"val"] ;
            
            if([val isEqual:[NSNull null]])
                val=@"";
            if(val==nil)
                val=@"";
            if([val isEqualToString:@"null"])
                val=@"";
            
            
            
            CGRect frame;
            frame.size = constraintval;
            frame.origin.x=0;
            frame.origin.y=0;
            RTLabel* rtlabel = [[RTLabel alloc] initWithFrame:frame];
            [rtlabel setLineBreakMode: RTTextLineBreakModeWordWrapping];
            //        rtlabel.lineSpacing = 20.0;
            [rtlabel setText: val];
            CGSize sizeval=rtlabel.optimumSize;
            
            
            CGSize sizekey = [key sizeWithFont:[UIFont systemFontOfSize:17.0] constrainedToSize:constraintkey lineBreakMode:NSLineBreakByWordWrapping];
            //           CGSize sizeval = [val sizeWithFont:[UIFont systemFontOfSize:17.0] constrainedToSize:constraintval lineBreakMode:NSLineBreakByWordWrapping];
            float height = MAX(sizekey.height,sizeval.height);
            height = MAX(height+LINE_WIDTH, DEF_CELL_HEIGHT);
            
            
            return height;
        }
        else if([type isEqualToString:@"img"])
        {
            int img_count = [[item_json valueForKey:@"count"] intValue];
            double ret = 0;
            for(int j=0;j<img_count;j++)
            {
                NSDictionary* img_json =[item_json objectForKey:[NSString stringWithFormat:@"image_%d",j ]];
                float width = [[img_json valueForKey:@"width"]floatValue];
                float height = [[img_json valueForKey:@"height"]floatValue];
                ret+=height*tableView.bounds.size.width / width;
            }
            
            return ret;
        }
        else if([type isEqualToString:@"content"])
                return 270;
        return 44;
    }
    else
    {
        if(indexPath.section==1)
            return 270;
        else
        {
            NSDictionary* section_json = [self.detail_data objectForKey:[NSString stringWithFormat:@"detail_%ld",(long)indexPath.section-2]];
            
            NSDictionary* item_json =[section_json objectForKey:[NSString stringWithFormat:@"item_%ld",(long)indexPath.row ]];
            
            NSString* type=[section_json valueForKey:@"type"] ;
            
            if([type isEqualToString:@"kv"])
            {
                float width = tableView.frame.size.width;
                width-=CELL_MARGIN*2;
                CGSize constraintkey = CGSizeMake(width*0.4-2*LABEL_MARGIN, 20000.0f);//key label width is 40% cell width;
                CGSize constraintval = CGSizeMake(width*0.6-2*LABEL_MARGIN, 20000.0f);//val label width is 60% cell width;
                
                
                
                //  NSDictionary* item = [self.content get_item_seg:indexPath.section row:indexPath.row];
                NSString* key =[item_json valueForKey:@"key"] ;
                
                //   [cell.keyLabel sizeToFit];
                NSString* val=[item_json valueForKey:@"val"] ;
                
                if([val isEqual:[NSNull null]])
                    val=@"";
                if(val==nil)
                    val=@"";
                if([val isEqualToString:@"null"])
                    val=@"";
                
                
                
                CGRect frame;
                frame.size = constraintval;
                frame.origin.x=0;
                frame.origin.y=0;
                RTLabel* rtlabel = [[RTLabel alloc] initWithFrame:frame];
                [rtlabel setLineBreakMode: RTTextLineBreakModeWordWrapping];
                //        rtlabel.lineSpacing = 20.0;
                [rtlabel setText: val];
                CGSize sizeval=rtlabel.optimumSize;
                
                
                CGSize sizekey = [key sizeWithFont:[UIFont systemFontOfSize:17.0] constrainedToSize:constraintkey lineBreakMode:NSLineBreakByWordWrapping];
                //           CGSize sizeval = [val sizeWithFont:[UIFont systemFontOfSize:17.0] constrainedToSize:constraintval lineBreakMode:NSLineBreakByWordWrapping];
                float height = MAX(sizekey.height,sizeval.height);
                height = MAX(height+LINE_WIDTH, DEF_CELL_HEIGHT);
                
                
                return height;
            }
            else if([type isEqualToString:@"img"])
            {
                int img_count = [[item_json valueForKey:@"count"] intValue];
                double ret = 0;
                for(int j=0;j<img_count;j++)
                {
                    NSDictionary* img_json =[item_json objectForKey:[NSString stringWithFormat:@"image_%d",j ]];
                    float width = [[img_json valueForKey:@"width"]floatValue];
                    float height = [[img_json valueForKey:@"height"]floatValue];
                    ret+=height*tableView.bounds.size.width / width;
                }
                
                return ret;
            }
            return 44;
        }
    }
    
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //    DebugLog(@"cellForRowAtIndexPath");
    
    
    AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];

    
    if(indexPath.section==0)
    {
        NSString *CellIdentifier = @"DetailHeaderCell";
        DetailHeaderCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
        
         NSMutableDictionary* section_json = [[self.detail_data objectForKey:@"img_section"] mutableCopy];
        
        if (!appDelegate.user) { // 没有登录时隐藏add to portfolio，使add to cart与add to wishlist对齐
            cell.btnaddPortfolio.hidden = YES;
            CGRect wishListFrame = cell.btnaddWish.frame;
            CGRect cartFrame = cell.btnaddCart.frame;
            cartFrame.origin.x = wishListFrame.origin.x;
            cell.btnaddCart.frame = cartFrame;
        }
        
       
        if (appDelegate.user && appDelegate.user_type == USER_ROLE_CUSTOMER) {
            cell.btnaddPortfolio.hidden = YES;
            
//            cell.btnNotifyMe.hidden = YES;
//            CGRect wishListFrame = cell.btnaddWish.frame;
//            CGRect cartFrame = cell.btnaddCart.frame;
//            cartFrame.origin.x = wishListFrame.origin.x;
//            cell.btnaddCart.frame = cartFrame;
            
            __weak typeof(self) weakself = self;
            cell.notifyMeBlock = ^{
                
                NSString *emailAddr = [appDelegate.customerInfo valueForKey:@"customer_email"];
                
                if (!emailAddr.length) {
                    
                    [self showEmailAddrBox];
                    
                } else {
                    
                    UIAlertView *waitting_alert = [RAUtils waiting_alert:@"Sending Email" title:@"Waitting"];
                    dispatch_async(dispatch_get_global_queue(0,0), ^{
                       
                        NSDictionary *dic = [iSalesNetwork notifyModel:self.product_id emailAddr:nil];
                            
                        dispatch_async(dispatch_get_main_queue(), ^{
                            
                            [waitting_alert dismissWithClickedButtonIndex:0 animated:YES];
                            
                            if ([[dic valueForKey:@"result"] integerValue] != RESULT_TRUE) {
                                
                                NSString *msg = [NSString stringWithFormat:@"The email send to %@ failed",emailAddr];
                                if ([[dic valueForKey:@"result"] integerValue] == 8) {
                                    if ([dic valueForKey:@"err_msg"]) {
                                        msg = [dic valueForKey:@"err_msg"];
                                    }
                                }
                                
                                UIAlertController *errorAlertVC = [UIAlertController alertControllerWithTitle:@"Warning" message:msg preferredStyle:UIAlertControllerStyleAlert];
                                UIAlertAction *action = [UIAlertAction actionWithTitle:@"ok" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
                                    
                                }];
                                
                                [errorAlertVC addAction:action];
                                [weakself presentViewController:errorAlertVC animated:YES completion:nil];
                            
                            } else {
                                
                                [RAUtils message_alert:@"Notification is sent to default email" title:@"Message" controller:weakself];
                                
                            }
                        });
                        
                        
                    });
                    
                }
                
            };
            
            cell.btnNotifyMe.layer.borderColor = [UIColor blackColor].CGColor;
            cell.btnNotifyMe.layer.borderWidth = 1.0f;
            cell.btnNotifyMe.layer.cornerRadius = 3.0f;
            cell.btnNotifyMe.layer.masksToBounds = YES;
            NSString *qtyStr = [section_json valueForKey:@"Availability"];
            if (!qtyStr || !qtyStr.length || [qtyStr isEqualToString:@"In Production"] || [qtyStr isEqualToString:@"0"] || [qtyStr isEqualToString:@"Sold Out"]) {
                cell.btnaddCart.enabled = NO;
                cell.btnNotifyMe.alpha = 1.0;
                cell.btnNotifyMe.enabled = YES;
            } else {
                cell.btnNotifyMe.enabled = NO;
                cell.btnNotifyMe.alpha = 0.4;
                cell.btnaddCart.enabled = YES;
            }
            
        } else {
            cell.btnNotifyMe.hidden = YES;
        }
        
        
        self.anchor_button.frame=cell.selector_Button.frame;
        cell.celldelegate=self;
        cell.quantity_text.text = [NSString stringWithFormat:@"%d",self.quantity];
        cell.step = self.step;
        cell.quantity = self.quantity;
        
        //        cell.stepper.stepValue = self.step;
//        cell.stepper.value = self.quantity;
        
        NSString* price = [section_json valueForKey:@"price"];
        


        
//        AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
        if(appDelegate.contact_id ==nil)
        {
//            appDelegate.bLogin = false;
//            cell.btnaddCart.enabled = false;
        }
        else
        {
            if ([price isEqualToString:@"No Price."]) {
//                cell.btnaddCart.enabled = false;
            }
            else
            {
//                cell.btnaddCart.enabled = true;
            }
        }

        
        int cqty = [[section_json valueForKey:@"Model QTY in cart"] intValue];
        
        cell.cqty = cqty;
        cell.set_cqty=^(int cqty)
        {
            [section_json setValue:[NSString stringWithFormat:@"%d",cqty] forKey:@"Model QTY in cart"];
            
            [self.detail_data  setObject:section_json forKey:@"img_section"];
            
            [self.detailTable reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
      
        };
        cell.set_update_data=^(bool bupdate)
        {
            //self.update_data = bupdate;
            if(bupdate)
                [((MainViewController*)appDelegate.main_vc) reloadCategory:true immediately:false];
            else
                [((MainViewController*)appDelegate.main_vc) reloadCategory:false immediately:false];
        };
        if(cqty>0)
        {
            cell.cqyt_label.hidden=false;
            cell.cqyt_label.text=[NSString stringWithFormat:@"Model QTY in Cart:%d",cqty];
        }
        else
        {
            cell.cqyt_label.hidden=true;
            cell.cqyt_label.text=nil;
        }
        
        
        cell.descriptionRTLabel.text =[NSString stringWithFormat:@"%@\n\n",[section_json valueForKey:@"model_descrition"]];
        
    //    cell.descriptionLabel.text =[NSString stringWithFormat:@"%@\n\n",[section_json valueForKey:@"model_descrition"]];
        cell.model_label.text =[section_json valueForKey:@"model_name"];
        
        
//        UIImage* qrimg=[QRCodeGenerator qrImageForString:[section_json valueForKey:@"model_name"] imageSize:80];
//        cell.qrcode_imageview.image = qrimg;
        if(appDelegate.bLogin==true)
        {
        
        if(appDelegate.can_see_price&&appDelegate.price_hidden==false)
        {
            
        }
        else
        {
            price=nil;
        }
        }
        cell.priceLabel.text =price;
        
        
        
//        cell.shipLabel.text = [section_json valueForKey:@"ship"];
        cell.count_Label.text =[section_json valueForKey:@"Availability"] ;
        
        
        NSString* eta =[section_json valueForKey:@"ETA"] ;
        if(eta.length>0)
        {
            
            cell.eta_label.hidden = false;
            cell.etaval_label.text = eta;
            cell.etaval_label.hidden = false;

            
            cell.incoming_stock_label.hidden=false;
            cell.incomingcount_Label.text =[section_json valueForKey:@"incoming_stock"] ;
            cell.incomingcount_Label.hidden = false;

            
        }
        else
        {
            cell.eta_label.hidden = true;
            cell.etaval_label.text = nil;
            cell.etaval_label.hidden = true;
            
            cell.incoming_stock_label.hidden = true;
            cell.incomingcount_Label.text = nil;
            cell.incomingcount_Label.hidden = true;
        }
        self.selector = [section_json objectForKey:@"selector"];
        
        if(self.selector!=nil)
        {
            
            [cell Hide_selector:false];
            cell.selector_nameLabel.text =[self.selector valueForKey:@"name"];
            
            int selector_count = [[self.selector valueForKey:@"count"] intValue];
            
            cell.selector_imageView.image = [UIImage imageNamed:@"loading_s"];
            
            for(int i=0;i<selector_count;i++)
            {
                NSDictionary* params_json=[[self.selector objectForKey:[NSString stringWithFormat:@"item_%d",i]] objectForKey:@"params"] ;
                
                //          NSString* aaa=[[[params_json objectForKey:@"param_0"] valueForKey:@"val"] stringValue];
                
                
                
                if([[[[params_json objectForKey:@"param_0"] valueForKey:@"val"] stringValue] isEqualToString:self.product_id])
                {
                    cell.selector_valLabel.text=[[self.selector objectForKey:[NSString stringWithFormat:@"item_%d",i]] valueForKey:@"title"];
                    
                    NSString* selectstr=[NSString stringWithFormat:@"%@: %@",[self.selector valueForKey:@"name"],[[self.selector objectForKey:[NSString stringWithFormat:@"item_%d",i]] valueForKey:@"title"]];
                    if([[self.selector objectForKey:[NSString stringWithFormat:@"item_%d",i]] valueForKey:@"title"] ==nil)
                        selectstr=[NSString stringWithFormat:@"%@:",[self.selector valueForKey:@"name"]];
                    cell.selector_label.text = selectstr;
                    
                    NSString* img_url = [[self.selector objectForKey:[NSString stringWithFormat:@"item_%d",i]] valueForKey:@"pic_url"];
                    
                    
                    
                    NSString* file_name=[img_url lastPathComponent];
                    NSData* img_data=[iSalesDB load_cached_img:file_name loadFrom:img_url];
                    if(img_data!=nil)
                    {
                        dispatch_async(dispatch_get_main_queue(), ^{
                            UIImage * img =[UIImage imageWithData:img_data];
                            cell.selector_imageView.image=img;
                            
                            
                            
                        });
                    }
                    else
                    {
                        NSData*  downloadimg_data = [NSData dataWithContentsOfURL:[NSURL URLWithString:img_url]];
                        dispatch_async(dispatch_get_main_queue(), ^{
                            
                            
                            
                            if(downloadimg_data!=nil)
                            {
                                
                                [iSalesDB cache_img:downloadimg_data filename:file_name saveTo:img_url];
                                
                                UIImage * img =[UIImage imageWithData:downloadimg_data];
                                cell.selector_imageView.image=img;
                            }
                            else
                                cell.selector_imageView.image = [UIImage imageNamed:@"notfound_s"];
                            
                        });
                    }
                    
                }
            }
        }
        else
        {
            [cell Hide_selector:true];
        }
//        cell.selector_valLabel.text =[[section_json objectForKey:@"selector"] valueForKey:@"name"];
        
        
         NSDictionary* property_json = [section_json objectForKey:@"property"];
//        int pcount = [[property_json valueForKey:@"count"]intValue];
        cell.property_nameLabel.text=[[property_json objectForKey:@"item_0"] valueForKey:@"key"];
        cell.property_valLabel.text=[[property_json objectForKey:@"item_0"] valueForKey:@"val"];
        
        cell.product_id = self.product_id;
//        cell.itemIDLabel.text = [NSString stringWithFormat:@"Item id:%d",3947105];
        [cell setup];
        [cell ClearPhotos];
         NSDictionary* imgs_json = [section_json objectForKey:@"images"];
        int count = [[imgs_json valueForKey:@"img_count"]intValue];
        if(count<2-1)//1 for qrcode;
            cell.pageControl.hidden = true;
        else
            cell.pageControl.hidden = false;
        
       // NSMutableArray* urls= [[NSMutableArray alloc]init];
        
       // cell.urls = urls;
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            
            for(int i=0;i<count;i++)
            {
                
                NSDictionary* img_json=[imgs_json objectForKey:[NSString stringWithFormat:@"img_%d",i]];
                
                NSString* img_url = [img_json valueForKey:@"s"];
                
                
            //    NSString* img_url_l = [img_json valueForKey:@"l"];
            //    if(img_url_l.length>0)
             //      [urls addObject:img_url_l];
                NSString* file_name=[img_url lastPathComponent];
                NSData* img_data=[iSalesDB load_cached_img:file_name loadFrom:img_url];
                if(img_data!=nil)
                {
                    dispatch_async(dispatch_get_main_queue(), ^{
                        UIImage * img =[UIImage imageWithData:img_data];
                        [cell AddPhoto:img];
                        
                        
                    if(i==count-1)
                    {
                        UIImage* qrimg=[QRCodeGenerator qrImageForString:[section_json valueForKey:@"model_name"] imageSize:350];
                        if(qrimg!=nil)
                            [cell AddPhoto:qrimg];
                    }
//                        if(i==0)
//                        cell.imageView.image = img;
                    });
                }
                else
                {
                    NSData*  downloadimg_data = [NSData dataWithContentsOfURL:[NSURL URLWithString:img_url]];
                    dispatch_async(dispatch_get_main_queue(), ^{
                        
                        
                        
                        if(downloadimg_data!=nil)
                        {
                            
                            [iSalesDB cache_img:downloadimg_data filename:file_name saveTo:img_url];
                            
                            UIImage * img =[UIImage imageWithData:downloadimg_data];
                            [cell AddPhoto:img];
                            
                            if(i==count-1)
                            {
                                UIImage* qrimg=[QRCodeGenerator qrImageForString:[section_json valueForKey:@"model_name"] imageSize:350];
                                if(qrimg!=nil)
                                    [cell AddPhoto:qrimg];
                            }
//                            if(i==0)
//                                cell.imageView.image = img;
                        }
                        else
                        {
                            
                            
                            UIImage * img =[UIImage imageNamed:@"notfound_l"];
                            [cell AddPhoto:img];
                            
                            if(i==count-1)
                            {
                                UIImage* qrimg=[QRCodeGenerator qrImageForString:[section_json valueForKey:@"model_name"] imageSize:350];
                                if(qrimg!=nil)
                                    [cell AddPhoto:qrimg];
                            }
//                            if(i==0)
//                                cell.imageView.image = img;
                        }
                        
                    });
                }
            }
            


            
        });
       // cell.backgroundColor = [UIColor whiteColor];
        
        
        cell.shopCartBlock = ^(UIImageView *imageView){
            self.add_cart=true;
            CGRect rect = [tableView rectForRowAtIndexPath:indexPath];
            rect.origin.y = rect.origin.y - [self.detailTable contentOffset].y;
            CGRect headRect = imageView.frame;
            headRect.origin.y = rect.origin.y+headRect.origin.y;
            [self startAnimationWithRect:headRect ImageView:imageView];
            
            [self.navigationController popToRootViewControllerAnimated:true];
            
//            [((MainViewController*)appDelegate.main_vc) reloadOrder:true immediately:false];
            [((MainViewController*)appDelegate.main_vc) switchToCart];
            
            
        };
        
        cell.WatchlistBlock = ^(UIImageView *imageView){
            self.add_wish=true;
            CGRect rect = [tableView rectForRowAtIndexPath:indexPath];
            rect.origin.y = rect.origin.y - [self.detailTable contentOffset].y;
            CGRect headRect = imageView.frame;
            headRect.origin.y = rect.origin.y+headRect.origin.y;
            [self startAnimationWithRect:headRect ImageView:imageView];
        };
        
        cell.PortfolioBlock = ^(UIImageView *imageView){
            self.add_portfolio=true;
            CGRect rect = [tableView rectForRowAtIndexPath:indexPath];
            rect.origin.y = rect.origin.y - [self.detailTable contentOffset].y;
            CGRect headRect = imageView.frame;
            headRect.origin.y = rect.origin.y+headRect.origin.y;
            [self startAnimationWithRect:headRect ImageView:imageView];
            
            AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
            
            [((MainViewController*)appDelegate.main_vc) reloadPortfolio:true immediately:false];
        };
        
        return cell;
    }
//    NSDictionary* related_json = [self.detail_data objectForKey:@"related_model"];
//    if(related_json==nil)
    else
    {
        
        
        
        
        NSDictionary* section_json  = [self.detail_data objectForKey:[NSString stringWithFormat:@"detail_%ld",(long)indexPath.section-1]];
        
        NSDictionary* item_json =[section_json objectForKey:[NSString stringWithFormat:@"item_%ld",(long)indexPath.row ]];
        
        NSString *CellIdentifier = @"DetailInfoCell";
        
        NSString* type=[section_json valueForKey:@"type"] ;
        
        if([type isEqualToString:@"kv"])
        {
            float width = tableView.frame.size.width;
            
            width-=CELL_MARGIN*2;
            CGSize constraintkey = CGSizeMake(width*0.4-2*LABEL_MARGIN, 20000.0f);//key label width is 40% cell width;
            CGSize constraintval = CGSizeMake(width*0.6-2*LABEL_MARGIN, 20000.0f);//val label width is 60% cell width;
            //     NSDictionary* item = [self.content get_item_seg:indexPath.section row:indexPath.row];
            NSString* key =[item_json valueForKey:@"key"] ;
            
            NSString* val=[item_json valueForKey:@"val"] ;
            
            
            NSString* type=[item_json valueForKey:@"type"] ;
            
            if([type isEqualToString:@"price"])
            {
            
            if(appDelegate.can_see_price&&appDelegate.price_hidden==false)
            {
                
            }
            else
            {
                val=nil;
            }
            }
            
            
            if([val isEqual:[NSNull null]])
                val=@"";
            if(val==nil)
                val=@"";
            if([val isEqualToString:@"null"])
                val=@"";
            
            
            
            
            CGRect frame;
            frame.size = constraintval;
            frame.origin.x=0;
            frame.origin.y=0;
            RTLabel* rtlabel = [[RTLabel alloc] initWithFrame:frame];
            [rtlabel setLineBreakMode: RTTextLineBreakModeWordWrapping];
            //        rtlabel.lineSpacing = 20.0;
            [rtlabel setText: val];
            CGSize sizeval=rtlabel.optimumSize;
            CGSize sizekey = [key sizeWithFont:[UIFont systemFontOfSize:17.0] constrainedToSize:constraintkey lineBreakMode:NSLineBreakByWordWrapping];
            
            float height = MAX(sizekey.height,sizeval.height);
            height = MAX(height, DEF_CELL_HEIGHT-LINE_WIDTH);
            sizekey.height = height;
            sizekey.width = constraintkey.width;
            // sizeval.height = height;
            sizeval.width =constraintval.width;
            
            //    NSString *CellIdentifier = @"detail_item_kv";
            DetailKVCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
            if(cell==nil)
                DebugLog(@"cell is nil.........................");
            
            
            
            
            CGRect framekey = cell.keyLabel.frame;
            framekey.origin.x=CELL_MARGIN+LABEL_MARGIN;
            framekey.origin.y=LINE_WIDTH;
            framekey.size = sizekey;
            cell.keyLabel.frame = framekey;
            cell.keyLabel.text=key;
            CGRect frameval = cell.valLabel.frame;
            frameval.origin.x=constraintkey.width+CELL_MARGIN+3*LABEL_MARGIN; //2 margin for key 1 margin for value self
            frameval.origin.y=LINE_WIDTH;
            frameval.size = sizeval;
            cell.valLabel.frame = frameval;
            //        [cell.valLabel setTextAlignment:RTTextAlignmentCenter];
            cell.valLabel.text= val;
            CGPoint rcenter;
            rcenter.x = width * 0.4+width * 0.6/2;
            rcenter.y = height /2;
            cell.valLabel.center=rcenter;
            //        cell.valLabel.backgroundColor =[UIColor redColor];
            
            //        cell.contentView.superview.backgroundColor = [UIColor clearColor];
            //        cell.backgroundColor = [UIColor whiteColor];
            UIView * lineview = [[LineView alloc] initWithFrame:cell.contentView.frame];
            lineview.userInteractionEnabled = NO;// 不设为NO会屏蔽cell的点击事件
            lineview.backgroundColor = [UIColor clearColor];// 设为透明从而使得cell.backgroundColor有效.
            lineview.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
            [cell.contentView addSubview:lineview];// cell.contentView是个readonly属性,所以别想着替换contentView了.
            
            
            cell.backgroundColor = [UIColor whiteColor];
            return cell;
        }
        else if ([type isEqualToString:@"img"])
        {
            DetailImageCell *cell = [tableView dequeueReusableCellWithIdentifier:@"DetailImageCell" forIndexPath:indexPath];
            
            int img_count = [[item_json valueForKey:@"count"] intValue];
            double posy = 0;
            for(int j=0;j<img_count;j++)
            {
                NSDictionary* img_json =[item_json objectForKey:[NSString stringWithFormat:@"image_%d",j ]];
                float width = [[img_json valueForKey:@"width"]floatValue];
                float height = [[img_json valueForKey:@"height"]floatValue];
                //
                UIImageView * imgview = [[UIImageView alloc] initWithFrame:CGRectMake(0, posy, tableView.bounds.size.width , height*tableView.bounds.size.width / width)];
                NSString* img_url = [img_json valueForKey:@"img_url"];
                posy+=height*tableView.bounds.size.width / width;
                NSString* file_name=[img_url lastPathComponent];
                NSData* img_data=[iSalesDB load_cached_img:file_name loadFrom:img_url];
                if(img_data!=nil)
                {
                    
                    UIImage * img =[UIImage imageWithData:img_data];
                    imgview.image = img;
                    [cell addSubview:imgview];
                }
                else
                {
                    
                    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
                        
                        NSData*  downloadimg_data = [NSData dataWithContentsOfURL:[NSURL URLWithString:img_url]];
                        
                        dispatch_async(dispatch_get_main_queue(), ^{
                            
                            
                            
                            if(downloadimg_data!=nil)
                            {
                                
                                [iSalesDB cache_img:downloadimg_data filename:file_name saveTo:img_url];
                                
                                UIImage * img =[UIImage imageWithData:downloadimg_data];
                                imgview.image = img;
                                [cell addSubview:imgview];
                            }
                            else
                            {
                                imgview.image = [UIImage imageNamed:@"notfound_l"];
                                
                                [cell addSubview:imgview];
                                
                            }
                        });
                    });
                    
                    
                }
                
                
            }
            cell.backgroundColor = [UIColor whiteColor];
            return cell;
        }
        else if ([type isEqualToString:@"content"])
        {

                NSString *CellIdentifier = @"DetailTopicCell";
    
            NSString* data=[section_json valueForKey:@"data"] ;
            if([data isEqualToString:@"local"])
            {
                [appDelegate.recent_model addEntriesFromDictionary:section_json];
                
                // NSDictionary* section_json = [self.detail_data objectForKey:@"related_model"];
                DetailTopicCell * cell= [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
                cell.itemdelegate = self;
                cell.related_data = appDelegate.recent_model;
                [cell.topicCollectionView reloadData];
                
                cell.backgroundColor = [UIColor whiteColor];
                return cell;
                
            }
            else
            {
    
                // NSDictionary* section_json = [self.detail_data objectForKey:@"related_model"];
                DetailTopicCell * cell= [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
                cell.itemdelegate = self;
                cell.related_data = section_json;
            [cell.topicCollectionView reloadData];
            
            cell.backgroundColor = [UIColor whiteColor];
                return cell;
            }
            
        }
        return nil;
        
    }

    
}

-(void)startAnimationWithRect:(CGRect)rect ImageView:(UIImageView *)imageView
{
    if (!_layer) {
        //        _btn.enabled = NO;
        _layer = [CALayer layer];
        _layer.contents = (id)imageView.layer.contents;
        
        _layer.contentsGravity = kCAGravityResizeAspectFill;
        _layer.bounds = rect;
        [_layer setCornerRadius:CGRectGetHeight([_layer bounds]) / 2];
        _layer.masksToBounds = YES;
        // 导航64
        _layer.position = CGPointMake(imageView.center.x, CGRectGetMidY(rect)+64);
        //        [_tableView.layer addSublayer:_layer];
        [self.view.layer addSublayer:_layer];
        self.path = [UIBezierPath bezierPath];
//        [_path moveToPoint:_layer.position];
                [_path moveToPoint:imageView.center];
        [_path addLineToPoint:CGPointMake(imageView.center.x, imageView.center.y-100)];
        
        //        (SCREEN_WIDTH - 60), 0, 50, 50)
       // [_path addQuadCurveToPoint:CGPointMake(SCREEN_WIDTH - 40, SCREEN_HEIGHT-40) controlPoint:CGPointMake(SCREEN_WIDTH/2,rect.origin.y-80)];
        //        [_path addLineToPoint:CGPointMake(SCREEN_WIDTH-40, 30)];
    }
    [self groupAnimation];
}
-(void)groupAnimation
{
    self.detailTable.userInteractionEnabled = NO;
    CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
    animation.path = _path.CGPath;
//    animation.rotationMode = kCAAnimationRotateAuto;
//    
    CABasicAnimation *expandAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
    expandAnimation.duration = 0.3f;
    expandAnimation.fromValue = [NSNumber numberWithFloat:1];
    expandAnimation.toValue = [NSNumber numberWithFloat:2.0f];
    expandAnimation.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
    
    CABasicAnimation *narrowAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
    narrowAnimation.beginTime = 0.3;
    narrowAnimation.fromValue = [NSNumber numberWithFloat:2.0f];
    narrowAnimation.duration = 0.9f;
    narrowAnimation.toValue = [NSNumber numberWithFloat:0.3f];
//
//    narrowAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
    
    CAAnimationGroup *groups = [CAAnimationGroup animation];
    groups.animations = @[animation,expandAnimation,narrowAnimation];
    groups.duration = 1.0f;
    groups.removedOnCompletion=NO;
    groups.fillMode=kCAFillModeForwards;
    groups.delegate = self;
    [_layer addAnimation:groups forKey:@"group"];
}

-(void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag
{
    //    [anim def];
    if (anim == [_layer animationForKey:@"group"]) {
        self.detailTable.userInteractionEnabled = YES;
        //        _btn.enabled = YES;
        [_layer removeFromSuperlayer];
        _layer = nil;
        
        
//        _cnt++;
//        if (_cnt) {
//            _cntLabel.hidden = NO;
//        }
//        CATransition *animation = [CATransition animation];
//        animation.duration = 0.25f;
//        _cntLabel.text = [NSString stringWithFormat:@"%d",_cnt];
//        [_cntLabel.layer addAnimation:animation forKey:nil];
//        CABasicAnimation *shakeAnimation = [CABasicAnimation animationWithKeyPath:@"transform.translation.y"];
//        shakeAnimation.duration = 0.25f;
//        shakeAnimation.fromValue = [NSNumber numberWithFloat:-5];
//        shakeAnimation.toValue = [NSNumber numberWithFloat:5];
//        shakeAnimation.autoreverses = YES;
//        [_btn.layer addAnimation:shakeAnimation forKey:nil];
    }
}
#pragma mark - hide section button clicked
- (void)RefreshSection:(UIButton *)sender {
    
    
    sender.enabled=false;
    NSDictionary* section_json = nil;
    
    
    NSDictionary* related_json = [self.detail_data objectForKey:@"related_model"];
    if(related_json==nil)
    {
        
         section_json = [self.detail_data objectForKey:[NSString stringWithFormat:@"detail_%ld",(long)(sender.tag-1)]];
       
    }
    else
    {
        if(sender.tag==1)
        {
            section_json = related_json ;
        }
        else
        {
            section_json = [self.detail_data objectForKey:[NSString stringWithFormat:@"detail_%ld",(long)sender.tag-2]];
        }
    }
    
    

    NSString* url = section_json[@"data_interface"];
    NSMutableDictionary* params = [section_json[@"params"] mutableCopy];
    
    
    if(params==nil)
        params = [[NSMutableDictionary alloc] init];
    

    
    NSUInteger ii[2] = {sender.tag,0};
    NSIndexPath* indexpath= [NSIndexPath indexPathWithIndexes:ii length:2];
    
    DetailTopicCell * cell=[self.detailTable cellForRowAtIndexPath:indexpath];

    [cell begin_refresh];
//    UIAlertView * waitalert = [RAUtils waiting_alert:@"Please wait..."title:@"Refreshing"];
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        
        NSDictionary* editor_json = [iSalesNetwork commoneditor_partialrefresh:params url:url];
        
        dispatch_async(dispatch_get_main_queue(), ^{
            [cell end_refresh ];
//            [waitalert dismissWithClickedButtonIndex:0 animated:FALSE];
             sender.enabled=true;
            
            if([[editor_json valueForKey:@"result"] intValue]==2)
            {
                
                [self.detail_data addEntriesFromDictionary:editor_json];
                
                    NSRange range = NSMakeRange(sender.tag, 1);
                    NSIndexSet *sectionToReload = [NSIndexSet indexSetWithIndexesInRange:range];
                    [self.detailTable reloadSections:sectionToReload withRowAnimation:UITableViewRowAnimationAutomatic];
                
            }
            else
            {
                [RAUtils message_alert:[editor_json valueForKey:@"err_msg"] title:nil controller:self] ;
            }
            
            
        });
    });

    
    
    
//    self.showMore=!self.showMore;
//    NSRange range = NSMakeRange(1, 1);
//    NSIndexSet *sectionToReload = [NSIndexSet indexSetWithIndexesInRange:range];
//    [self.detailTable reloadSections:sectionToReload withRowAnimation:UITableViewRowAnimationAutomatic];
    
    
    
}
#pragma mark - Support scanner
-(void) onDecodedData:(NSString*) value
{
    //    UIApplication * app = [UIApplication sharedApplication];
    //    AppDelegate *appDelegate = (AppDelegate *)[app delegate];
    //    MainViewController* main_vc=(MainViewController*)appDelegate.main_vc;
    //
    self.model_name = value;
    self.product_id = nil;
    self.use_model_name = true;
    [self reload];
    DebugLog(@"color selected");
    
    
}

#pragma mark - Handle Notification

- (void)dealloc {
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

- (void)registeObserver {
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleNoRightMsg:) name:No_Rights_Notification object:nil];
}

- (void)handleNoRightMsg:(NSNotification *)notification {
    
    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Warning" message:@"You have no rights to do that." preferredStyle:UIAlertControllerStyleAlert];
                                          
    UIAlertAction *action = [UIAlertAction actionWithTitle:@"ok" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        
        [alertController dismissViewControllerAnimated:YES completion:nil];
        
    }];
    
    [alertController addAction:action];
    
    [self presentViewController:alertController animated:YES completion:nil];
}

#pragma mark - action

- (void)showEmailAddrBox {
    AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    
    JKMessageBoxController *emailAddrVC = [JKMessageBoxController messageBoxControllerWithTip:@"E-mail not setup, please enter your default e-mail" ContentSize:CGSizeMake(350, 130)];
    emailAddrVC.textFiled.secureTextEntry = NO;
    emailAddrVC.yesButtonTitle = @"send";
    
    __weak typeof(emailAddrVC) weakVC = emailAddrVC;
    __weak typeof(self) weakself = self;
    
    emailAddrVC.textHandler = ^(NSString *text){
        
        // 验证邮箱格式是否正确
        NSString *match = @"^[A-Za-zd]+([-_.][A-Za-zd]+)*@([A-Za-zd]+[-.])+[A-Za-zd]{2,5}$";
        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",match];
        BOOL isEmailAddr = [predicate evaluateWithObject:text];
        if (isEmailAddr) {
            
            // 验证是邮件地址，发送邮件
            [weakVC dismissViewControllerAnimated:YES completion:^{
                
                UIAlertView *waitting_alert = [RAUtils waiting_alert:@"Sending Email" title:@"Waitting"];
                
                dispatch_async(dispatch_get_global_queue(0, 0), ^{
                    
                    NSDictionary *result = [iSalesNetwork notifyModel:weakself.product_id emailAddr:text];
                    DebugLog(@"email cart result: %@",result);
                    dispatch_async(dispatch_get_main_queue(), ^{
                        
                        [waitting_alert dismissWithClickedButtonIndex:0 animated:YES];
                        
                        if ([[result objectForKey:@"result"] integerValue] != RESULT_TRUE) {
                            
                            UIAlertController *errorAlertVC = [UIAlertController alertControllerWithTitle:@"Warning" message:[NSString stringWithFormat:@"The email send to %@ failed",text] preferredStyle:UIAlertControllerStyleAlert];
                            UIAlertAction *action = [UIAlertAction actionWithTitle:@"ok" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
                                
                            }];
                            
                            [errorAlertVC addAction:action];
                            [weakself presentViewController:errorAlertVC animated:YES completion:nil];
                            
                        }else {
                            
                            
                            
                        }
                        
                    });
                    
                });
                
            }];
            
        } else {
            
            // 非邮件地址，警告
            [weakVC warning:@"Please enter right email address"];
            
        }
        
    };
    
    [self presentViewController:emailAddrVC animated:YES completion:nil];
}

@end
