//
//  PBAddIssueController.m
//  IphoneBIMe
//
//  Created by zjf on 2018/8/14.
//  Copyright © 2018年 ProBIM. All rights reserved.
//

#import "PBAddIssueController.h"
#import "PBInputTableViewCell.h"
#import "PBChooseTableViewCell.h"
#import "PBEditTextController.h"
#import "PBChooseView.h"
#import "PBPersonTableViewCell.h"
#import "PBEditPersonView.h"
#import "PBEditLableView.h"
#import "PBDateTableViewCell.h"
#import "PBEditDateView.h"
#import "PBIssueAddModel.h"
#import "PBProjectModel.h"
#import "PBPersonModel.h"
#import "PBViewPointModel.h"
#import "PBCommentsController.h"
#import "PBIssueListModel.h"
#import "PBIssueDetailModel.h"
#import "PBNetworkModel.h"
#import "PBDocModel.h"
#import "PBLoadModelDisplayController.h"
#import "PBPreviewDocViewController.h"
#import "PBIssueImageTableViewCell.h"
#import "PBPositionTableViewCell.h"
#import "PBIssueHeaderView.h"
#import "PBIssueModelListController.h"
#import "PBOpenViewPointController.h"
#import "PBOpenDrawController.h"
#import "PBTagModel.h"
#import "PBDocListTableViewCell.h"
#import "DwgViewController.h"

static NSString *const ImageCellID = @"ImageCellID";
static NSString *const PositionCellID = @"PositionCellID";
static NSString *const InputCellID = @"InputCellID";
static NSString *const chooseCellID = @"chooseCellID";
static NSString *const personCellID = @"personCellID";
static NSString *const dateCellID = @"dateCellID";
static NSString *const docCellID = @"docCellID";
@interface PBAddIssueController ()<UITableViewDataSource, UITableViewDelegate, LFImagePickerControllerDelegate>
@property (nonatomic, strong) UITableView *tableView;
@property (nonatomic, strong) PBChooseView *chooseView;
@property (nonatomic, strong) PBEditPersonView *editPersonView;
@property (nonatomic, strong) PBEditLableView *editLabelView;
@property (nonatomic, strong) PBEditDateView *editDateView;
@property (nonatomic, strong) NSMutableArray<PBIssueAddModel *> *dataListM;
@property (nonatomic, strong) NSMutableArray *selectedPhotos;
@property (nonatomic, strong) NSMutableArray *selectedAssets;
@property (nonatomic, strong) PBIssueHeaderView *issueHeaderView;
@property (nonatomic, strong) NSMutableArray *imageDocArr;
@property (nonatomic, strong) NSMutableArray *docArr;
@property (nonatomic, strong) NSMutableArray *associatedDocs;
@property (nonatomic, assign) RoleType roleType;
@property (nonatomic, assign) NSInteger mandatoryCount;
@property (nonatomic, weak) UIView *linView;
@property (nonatomic, strong) PBIssueDetailModel *issueDetailModel;
@property (nonatomic, strong) PBDrawingsInfoModel *drawingsInfoModel;
@property (nonatomic, assign) BOOL isIssueManage;
@end

@implementation PBAddIssueController
- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.f) {
        self.edgesForExtendedLayout = UIRectEdgeNone;
        self.navigationController.interactivePopGestureRecognizer.enabled = NO;    //让rootView禁止滑动
    }
}
- (void)viewDidLoad {
    [super viewDidLoad];
    [PBNoteCenter addObserver:self selector:@selector(updatePosition:) name:PBNoteCenterIssueUpdatePositioning object:nil];
    if (self.issueListModel.isIssueManager) {
        self.isIssueManage = YES;
    }else {
        self.isIssueManage = NO;
    }
    [self setupUI];
    [self loadData];
    [self setupNav];
}
- (void)updatePosition:(NSNotification *)noti {
    PBIssueAddModel *issueAddModel = noti.object;
    NSIndexPath *path;
    if ([issueAddModel.key isEqualToString:@"viewPoint"]) {
        path = [NSIndexPath indexPathForRow:0 inSection:0];
    }else {
        path = [NSIndexPath indexPathForRow:1 inSection:0];
    }
    if (self.isAddIssue) {
        [self.tableView reloadRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationFade];
    }else {
        if ([issueAddModel.key isEqualToString:@"viewPoint"]) {
            NSDictionary *viewPointDic = @{
                                           @"modelID" : issueAddModel.veiwPointModel.ModelID,
                                           @"viewPointID" : issueAddModel.veiwPointModel.ID
                                           };
            [self updaIssueWithStatusId:nil andTypeId:nil andRUserIDStr:nil andLUserIDStr:nil andEndDate:nil andViewPoint:viewPointDic andDraw:nil andIndexPath:path];
        }else {
            NSDictionary *drawDic = @{
                                      @"modelID" : issueAddModel.modelsModel.ID,
                                      @"imageID" : issueAddModel.drawingposModel.FileId,
                                      @"position" : [NSString stringWithFormat:@"%@_%@",issueAddModel.drawingposModel.PosX,issueAddModel.drawingposModel.PosY],
                                      };
            [self updaIssueWithStatusId:nil andTypeId:nil andRUserIDStr:nil andLUserIDStr:nil andEndDate:nil andViewPoint:nil andDraw:drawDic andIndexPath:path];
        }
    }
}

- (void)updateCompletionIndicator {
    
    if (!self.isAddIssue) {
        return;
    }
    CGFloat oneWidth = PBScreenWidth / self.mandatoryCount;
    NSInteger completedCount = 0;
    for (PBIssueAddModel *issueAddModel in self.dataListM) {
        if (issueAddModel.isMandatory) {
            if ([issueAddModel.cellType isEqualToString:@"input"]) {
                if (issueAddModel.inputStr != nil && ![issueAddModel.inputStr isEqualToString:@""]) {
                    ++completedCount;
                }
            }else if ([issueAddModel.cellType isEqualToString:@"choose"]) {
                if (issueAddModel.navModel){
                    ++completedCount;
                }
            }else if ([issueAddModel.cellType isEqualToString:@"person"]) {
                if (issueAddModel.personArr.count != 0) {
                    ++completedCount;
                }
            }else if ([issueAddModel.cellType isEqualToString:@"date"]) {
                if (issueAddModel.dateStr!= nil && ![issueAddModel.dateStr isEqualToString:@""]) {
                    ++completedCount;
                }
            }
        }
    }
    CGFloat linViewW = oneWidth *completedCount;
    [UIView animateWithDuration:0.2 animations:^{
        self.linView.width = linViewW;
    } completion:^(BOOL finished) {
        if (completedCount == self.mandatoryCount) {
            self.navigationItem.rightBarButtonItem.enabled = YES;
        }else {
            self.navigationItem.rightBarButtonItem.enabled = NO;
        }
    }];
}

- (void)loadData {
    self.dataListM = [[NSMutableArray alloc] init];
    NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"issueAdd" ofType:@"plist"];
    NSArray *arr = [NSArray arrayWithContentsOfFile:plistPath];
    NSMutableArray *listM = [[NSMutableArray alloc] init];
    for (NSDictionary *obj in arr) {
        PBIssueAddModel *model = [PBIssueAddModel yy_modelWithDictionary:obj];
        model.isAddIssue = self.isAddIssue;
        model.isIssueManager = self.isIssueManage;
        if (model.isMandatory) {
            ++self.mandatoryCount;
        }
        [listM addObject:model];
    }
    if (self.statusAndTypeData == nil) {
        [self getProjectParentId];
    }
    if (_isAddIssue) {
        [self setTableViewHeaderView];
        self.dataListM = listM;
        [self.dataListM removeLastObject];
    }else {
        [YJProgressHUD showProgress:@"" inView:self.view];
        [[PBNetworkTools sharedTools] RequestGetIssueDetailByIdWithIssueID:self.issueListModel.IssueId andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
            if (error) {
                NSLog(@"%@",error);
                [YJProgressHUD showMessage:@"加载失败" inView:self.view];
                return;
            }
            self.dataListM = listM;
            NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
            PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
            if (networkModel.Ret == 1) {
                PBIssueDetailModel *issueDetailModel = [PBIssueDetailModel yy_modelWithDictionary:networkModel.Data];
//                if (issueDetailModel.IssueId == nil || [issueDetailModel.IssueId isEqualToString:@""]) {
//                    [YJProgressHUD showMessage:@"此问题已删除" inView:self.view];
//                    [self dismissViewControllerAnimated:YES completion:nil];
//                    return;
//                }
                self.issueDetailModel = issueDetailModel;
                self.issueListModel = [PBIssueListModel yy_modelWithDictionary:self.issueDetailModel.issueObj];
                [self.navigationItem.rightBarButtonItem setTitle:[NSString stringWithFormat:@"评论(%zd)",self.issueDetailModel.comments.count]];
//                [self judgeRoleWith:issueDetailModel];
                //附件
                [self.associatedDocs addObjectsFromArray:self.issueDetailModel.base_files];
                [YJProgressHUD hide];
                [self setTableViewHeaderView];
                [self RefreshListData];
            }else {
                [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
            }
        }];
    }
}
- (void)RefreshListData {
    for (PBIssueAddModel *issueAddModel in self.dataListM) {
        if ([issueAddModel.cellType isEqualToString:@"input"]) {
            issueAddModel.inputStr = self.issueListModel.Title;
        }else if ([issueAddModel.cellType isEqualToString:@"choose"]) {
            PBIssueNavModel *navModel = [[PBIssueNavModel alloc] init];
            if ([issueAddModel.key isEqualToString:@"IssueStatusID"]) {
                if ([self.issueListModel.IssueStatus isEqualToString:@""]) {
                    issueAddModel.navModel = nil;
                }else {
                    navModel.ItemDetailId = self.issueListModel.IssueStatus;
                    navModel.ItemName = self.issueListModel.IssueStatusText;
                    issueAddModel.navModel = navModel;
                }
            }else {
                if ([self.issueListModel.IssueTypeID isEqualToString:@""]) {
                    issueAddModel.navModel = nil;
                }else {
                    navModel.ItemDetailId = self.issueListModel.IssueTypeID;
                    navModel.ItemName = self.issueListModel.IssueTypeText;
                    issueAddModel.navModel = navModel;
                }
            }
        } else if ([issueAddModel.cellType isEqualToString:@"person"]) {
            issueAddModel.personArr = [NSArray yy_modelArrayWithClass:[PBPersonModel class] json: self.issueDetailModel.joiners];
           
        } else if ([issueAddModel.cellType isEqualToString:@"date"]) {
            NSString *dateStr;
            if ([self.issueListModel.EndDate isEqualToString:@""] || [self.issueListModel.EndDate isEqualToString:@"0001-01-01 00:00:00"]) {
                dateStr = nil;
            }else {
                NSRange range = [self.issueListModel.EndDate rangeOfString:@"T"];
                dateStr = [self.issueListModel.EndDate substringToIndex:range.location];
            }
            issueAddModel.dateStr = dateStr;
        } else if ([issueAddModel.cellType isEqualToString:@"label"]) {
            issueAddModel.labelArr = [NSArray yy_modelArrayWithClass:[PBTagModel class] json:self.issueDetailModel.tagList];
        }
    }
    [self.tableView reloadData];
}
#pragma mark - 设置头视图
- (void)setTableViewHeaderView {
    CGFloat height = 177.f;
    if (self.isAddIssue) {
        if (self.selectedPhotos.count == 0 && self.base64Image == nil) {
            height = 61.f;
        }
    }else {
        if (self.associatedDocs.count == 0 && [self.issueListModel.ViewpointID isEqualToString:@""]) {
            height = 61.f;
        }
    }
    self.issueHeaderView.frame = CGRectMake(0, 0, self.view.width, height);
    if (self.isAddIssue) {
        if (self.base64Image) {
            NSRange range = [self.base64Image rangeOfString:@"base64,"];
            NSString *base64 = [self.base64Image substringFromIndex:range.location + range.length];
            UIImage *image = [NSString imageDecoding:base64];
            self.issueHeaderView.viewPointImage = image;
        }
        self.issueHeaderView.imageArr = self.selectedPhotos;
    }else {
        self.issueHeaderView.viewPointImageUrl = self.issueListModel.ImageUrl;
        self.issueHeaderView.imageDocArr = self.associatedDocs;
    }
    self.tableView.tableHeaderView = self.issueHeaderView;
}


- (PBIssueHeaderView *)issueHeaderView {
    __weak typeof(self) weakSelf = self;
    if (_issueHeaderView == nil) {
        _issueHeaderView = [[PBIssueHeaderView alloc] init];
        _issueHeaderView.projectMdoel = self.projectModel;
         RoleType roleType = PARTICIPANT;
        if (self.isAddIssue || self.isIssueManage) {
            roleType = CREATOR;
        }
        _issueHeaderView.roleType = roleType;
        self.issueHeaderView.ChooseImageBlock = ^{
            if ([weakSelf.issueListModel.DeleteMark isEqualToString:@"2"]) {
                [YJProgressHUD showMessage:@"已归档，无法修改" inView:weakSelf.view];
                return;
            }
            if (self.isAddIssue || weakSelf.isIssueManage) {
                [weakSelf takePhotoLibrary];
            }else {
                [YJProgressHUD showMessage:@"无修改权限" inView:weakSelf.view];
            }
        };
        self.issueHeaderView.DeleteImageBlock = ^(NSInteger index) {
            if (weakSelf.isAddIssue) {
                [weakSelf.selectedPhotos removeObjectAtIndex:index];
//                [weakSelf.selectedAssets removeObjectAtIndex:index];
                [weakSelf setTableViewHeaderView];
            }else {
                if ([weakSelf.issueListModel.DeleteMark isEqualToString:@"2"]) {
                    [YJProgressHUD showMessage:@"已归档，无法修改" inView:weakSelf.view];
                    return;
                }
                [weakSelf deleteRelationImageWithIndex:index];
            }
        };
        self.issueHeaderView.OpenViewPointBlock = ^{
            if (weakSelf.isAddIssue) {
                
            }else {
                PBLoadModelDisplayController *modelDisplayVC = [[PBLoadModelDisplayController alloc] init];
                modelDisplayVC.hidesBottomBarWhenPushed = YES;
                modelDisplayVC.projectIID = weakSelf.projectModel.bimcomposerid;
                modelDisplayVC.modelID = weakSelf.issueListModel.ModelId;
                modelDisplayVC.viewPointID = weakSelf.issueListModel.ViewpointID;
                [weakSelf.navigationController pushViewController:modelDisplayVC animated:YES];
            }
        };
    }
    return _issueHeaderView;
}

- (void)getProjectParentId {
//    [YJProgressHUD showCustomAnimation:@"" inview:self.view];
    [YJProgressHUD showProgress:@"" inView:self.view];
    [[PBNetworkTools sharedTools] getProjectParentIDWithProjectID:self.projectModel.organizeid andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
        if (error) {
            NSLog(@"%@",error);
            [YJProgressHUD showMessage:@"加载状态失败" inView:self.view];
            return;
        }
        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
        NSLog(@"%@",str);
        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
        if (networkModel.Ret == 1){
            [self loadTypeAndStatusWith:networkModel.Data];
        }else {
            [YJProgressHUD showMessage:@"加载状态、类型失败" inView:self.view];
        }
    }];
}
- (void)loadTypeAndStatusWith:(NSString *)parentId {
    __block NSArray *statusArr; __block NSArray *typeArr;
    dispatch_semaphore_t sem = dispatch_semaphore_create(0);
    NSInteger commandCount = 2;
    __block NSInteger httpFinishCount = 0;
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        [[PBNetworkTools sharedTools] getIssueStatusWithCompanyId:parentId andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
            if (error) {
                NSLog(@"%@",error);
                [YJProgressHUD showMessage:@"加载状态失败" inView:self.view];
                return;
            }
            NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
            PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
            if ([networkModel.Msg isEqualToString:@"OK"]) {
                statusArr = networkModel.Data;
                if (++httpFinishCount == commandCount) {
                    dispatch_semaphore_signal(sem);
                }
            }else {
                [YJProgressHUD showMessage:@"加载状态失败" inView:self.view];
                return;
            }
        }];
        
        [[PBNetworkTools sharedTools] getIssueTypesWithCompanyId:parentId andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
            if (error) {
                NSLog(@"%@",error);
                [YJProgressHUD showMessage:@"加载类型失败" inView:self.view];
                return;
            }
            NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
            PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
            if ([networkModel.Msg isEqualToString:@"OK"]) {
                typeArr = networkModel.Data;
                if (++httpFinishCount == commandCount) {
                    dispatch_semaphore_signal(sem);
                }
            }else {
                [YJProgressHUD showMessage:@"加载类型失败" inView:self.view];
                return;
            }
        }];
        //如果全部请求没有返回则该线程会一直阻塞
        dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);
        NSLog(@"全部加载完成==================: %@", [NSThread currentThread]);
        dispatch_async(dispatch_get_main_queue(), ^{
            NSLog(@"更新视图UI update in main thread!：%@",[NSThread currentThread]);
            [YJProgressHUD hide];
            NSMutableArray *statusArrM = [[NSMutableArray alloc] init];
            for (NSDictionary *dict in statusArr) {
                PBIssueNavModel *issueNavModel = [PBIssueNavModel yy_modelWithDictionary:dict];
                [statusArrM addObject:issueNavModel];
            }
            NSMutableArray *typeArrM = [[NSMutableArray alloc] init];
            for (NSDictionary *dict in typeArr) {
                PBIssueNavModel *issueNavModel = [PBIssueNavModel yy_modelWithDictionary:dict];
                [typeArrM addObject:issueNavModel];
            }
            self.statusAndTypeData = @{@"IssueStatus":statusArrM.mutableCopy, @"IssueTypes":typeArrM.mutableCopy};
        });
    });
}

- (void)setupUI {
    if (_isAddIssue) {
        self.view.backgroundColor = [UIColor z_colorWithR:216 G:216 B:216];
    }else {
        self.view.backgroundColor = [UIColor whiteColor];
    }
    UIView *linView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 3)];
    linView.backgroundColor = WarningColor;
    [self.view addSubview:linView];
    self.linView = linView;
    
    self.tableView = [[UITableView alloc] init];
    self.tableView.dataSource = self;
    self.tableView.delegate = self;
    self.tableView.rowHeight = UITableViewAutomaticDimension;
    self.tableView.estimatedRowHeight = 100.f;
    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
    [self.tableView registerClass:[PBIssueImageTableViewCell class] forCellReuseIdentifier:ImageCellID];
    [self.tableView registerClass:[PBPositionTableViewCell class] forCellReuseIdentifier:PositionCellID];
    [self.tableView registerClass:[PBInputTableViewCell class] forCellReuseIdentifier:InputCellID];
    [self.tableView registerClass:[PBChooseTableViewCell class] forCellReuseIdentifier:chooseCellID];
    [self.tableView registerClass:[PBPersonTableViewCell class] forCellReuseIdentifier:personCellID];
    [self.tableView registerClass:[PBDateTableViewCell class] forCellReuseIdentifier:dateCellID];
    [self.tableView registerClass:[PBDocListTableViewCell class] forCellReuseIdentifier:docCellID];
    [self.view addSubview:self.tableView];
    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.equalTo(self.view).offset(3);
        make.left.right.bottom.equalTo(self.view);
    }];
}
- (void)setupNav {
    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
    backNav.title = @"取消";
    [backNav addTarget:self action:@selector(backItemAction) forControlEvents:UIControlEventTouchUpInside];
    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
    self.navigationItem.leftBarButtonItem = backNavItem;
    if (self.isAddIssue) {
        UIBarButtonItem *saveNavItem = [[UIBarButtonItem alloc] initWithTitle:@"保存" style:UIBarButtonItemStylePlain target:self action:@selector(saveIssue)];
        saveNavItem.enabled = YES;
        self.navigationItem.rightBarButtonItem = saveNavItem;
        self.navigationItem.rightBarButtonItem.enabled = NO;
    }else {
        UIBarButtonItem *commentsItem = [[UIBarButtonItem alloc] initWithTitle:@"评论" style:UIBarButtonItemStylePlain target:self action:@selector(commentsAction)];
        self.navigationItem.rightBarButtonItem = commentsItem;
    }
}
- (void)backItemAction {
    [PBNoteCenter removeObserver:self];
    [self dismissViewControllerAnimated:YES completion:nil];
}
- (void)commentsAction {
    PBCommentsController *commentsVC = [[PBCommentsController alloc] init];
    commentsVC.projectModel = self.projectModel;
    commentsVC.issueListModel = self.issueListModel;
    commentsVC.issueDetailModel = self.issueDetailModel;
    commentsVC.CommentsCountBlock = ^(NSInteger count) {
        [self.navigationItem.rightBarButtonItem setTitle:[NSString stringWithFormat:@"评论(%zd)",count]];
    };
    [self.navigationController pushViewController:commentsVC animated:YES];
}
- (void)saveIssue {
    if (self.selectedPhotos.count == 0) {
        [YJProgressHUD showProgress:@"" inView:self.view];
        [self saveIssueDataWithFileId:@""];
    }else {
        [self uploadFileWithFile:self.selectedPhotos];
    }
}
- (void)saveIssueDataWithFileId:(NSString *)fileId {
    NSMutableDictionary *dictM = [[NSMutableDictionary alloc] init];
    for (PBIssueAddModel *issueAddModel in self.dataListM) {
    if ([issueAddModel.cellType isEqualToString:@"input"]) {
            [dictM setObject:issueAddModel.inputStr == nil ? @"" : issueAddModel.inputStr forKey:issueAddModel.key];
        }else if ([issueAddModel.cellType isEqualToString:@"choose"]) {
            if ([issueAddModel.key isEqualToString:@"IssueTypeId"]) {
                [dictM setObject:issueAddModel.navModel.ItemDetailId forKey:issueAddModel.key];
            }
        }else if ([issueAddModel.cellType isEqualToString:@"person"]) {
            NSMutableString *strM = [[NSMutableString alloc] init];
            for (PBPersonModel *personModel in issueAddModel.personArr) {
                [strM appendString:[NSString stringWithFormat:@"%@,",personModel.UserId]];
            }
            [dictM setObject:strM.copy == nil ? @"" : strM.copy  forKey:issueAddModel.key];
        }else if ([issueAddModel.cellType isEqualToString:@"date"]) {
            [dictM setObject:issueAddModel.dateStr== nil ? @"" : issueAddModel.dateStr forKey:issueAddModel.key];
        }
    }
    [dictM setObject:self.projectModel.organizeid forKey:@"OrganizeId"];
    [dictM setObject:fileId forKey:@"ImageIds"];
    if (self.viewPointStr) {
        [dictM setObject:self.modelID forKey:@"ModelID"];
        [dictM setObject:self.base64Image forKey:@"ImageUrl"];
        [dictM setObject:self.viewPointStr forKey:@"ViewPointID"];
    }else {
        [dictM setObject:@"" forKey:@"ModelID"];
        [dictM setObject:@"" forKey:@"ImageUrl"];
        [dictM setObject:@"" forKey:@"ViewPointID"];
    }
    [[PBNetworkTools sharedTools] RequestSaveIssueWithData:dictM andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
        if (error) {
            [YJProgressHUD showMessage:@"保存数据失败" inView:self.view];
            return;
        }
        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
        if (networkModel.Ret == 1) {
            [YJProgressHUD showSuccess:@"保存成功" inview:self.view];
            if (self.SaveSuccessBlock) {
                self.SaveSuccessBlock();
            }
            [self dismissViewControllerAnimated:YES completion:nil];
        }else {
            [YJProgressHUD showMessage:@"保存数据失败" inView:self.view];
        }
    }];
}

- (void)uploadFileWithFile:(NSArray *)files {
    [YJProgressHUD showProgress:@"" inView:self.view];
    NSString *issueID = self.issueListModel.IssueId;
    if (self.isAddIssue) {
        issueID = @"";
    }
    [[PBNetworkTools sharedTools] UploadImagesWithFiles:files andIssueID:issueID andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
        if (error) {
            [YJProgressHUD showMessage:@"上传文件失败" inView:self.view];
            return;
        }
        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
        NSLog(@"%@",str);
        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
        if (networkModel.Ret == 1) {
            if (self.isAddIssue) {
                NSMutableString *strM = [[NSMutableString alloc] init];
                NSString *fileID = @"";
                for (NSDictionary *obj in networkModel.Data) {
                    [strM appendFormat:@"%@,",[obj valueForKey:@"bf_guid"]];
                }
                if([strM length] > 0){
                    fileID = [strM substringToIndex:([strM length]-1)];
                }
                [self saveIssueDataWithFileId:fileID];
            }else {
                [YJProgressHUD hide];
                [self.associatedDocs addObjectsFromArray:networkModel.Data];
                [self setTableViewHeaderView];
            }
        }else {
            [YJProgressHUD showMessage:@"上传文件失败" inView:self.view];
        }
    }];
}

- (void)positionMoreFunctionsWithIssueAddModel:(PBIssueAddModel *)issueAddModel {
    NSString *title = @"图纸定位";
    NSString *action1Title = @"重新选择图纸定位";
    NSString *action2Title = @"清空图纸定位";
    if ([issueAddModel.key isEqualToString:@"viewPoint"]) {
        title = @"视点定位";
        action1Title = @"重新选择视点定位";
        action2Title = @"清空视点定位";
    }
    UIAlertController *actionSheet = [UIAlertController alertControllerWithTitle:title message:@"" preferredStyle:UIAlertControllerStyleActionSheet];
    
    UIAlertAction *action1 = [UIAlertAction actionWithTitle:action1Title style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
        PBIssueModelListController *modelListVC = [[PBIssueModelListController alloc] init];
        modelListVC.powerArr = appDelegate.powerArr;
        modelListVC.projectModel = self.projectModel;
        modelListVC.issueAddModel = issueAddModel;
        [self.navigationController pushViewController:modelListVC animated:YES];
    }];
    UIAlertAction *action2 = [UIAlertAction actionWithTitle:action2Title style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        NSIndexPath *path;
        if ([issueAddModel.key isEqualToString:@"viewPoint"]) {
            path = [NSIndexPath indexPathForRow:0 inSection:0];
            issueAddModel.modelsModel = nil;
            issueAddModel.veiwPointModel = nil;
        }else {
            path = [NSIndexPath indexPathForRow:1 inSection:0];
            issueAddModel.modelsModel = nil;
            issueAddModel.drawingsInfoModel = nil;
            issueAddModel.drawingposModel = nil;
        }
        if (self.isAddIssue) {
            [self.tableView reloadRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationFade];
        }else {
            if ([issueAddModel.key isEqualToString:@"viewPoint"]) {
                NSDictionary *viewPointDic = @{
                                               @"modelID" : @"",
                                               @"viewPointID" : @""
                                               };
                [self updaIssueWithStatusId:nil andTypeId:nil andRUserIDStr:nil andLUserIDStr:nil andEndDate:nil andViewPoint:viewPointDic andDraw:nil andIndexPath:path];
            }else {
                NSDictionary *drawDic = @{
                                          @"modelID" : @"",
                                          @"imageID" : @"",
                                          @"position" : @"",
                                          };
                [self updaIssueWithStatusId:nil andTypeId:nil andRUserIDStr:nil andLUserIDStr:nil andEndDate:nil andViewPoint:nil andDraw:drawDic andIndexPath:path];
            }
        }
    }];
    UIAlertAction *action3 = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
    [actionSheet addAction:action1];
    [actionSheet addAction:action2];
    [actionSheet addAction:action3];
    [self presentViewController:actionSheet animated:YES completion:nil];
}
#pragma mark - Table view data source
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return self.dataListM.count - 1 + self.issueDetailModel.relationFiles.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    __weak typeof(self) weakSelf = self;
        if (indexPath.row == 0) {
        PBIssueAddModel *issueAddModel = self.dataListM[indexPath.row];
        PBInputTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:InputCellID forIndexPath:indexPath];
        cell.issueAddModel = issueAddModel;
        cell.EditTextBlock = ^(NSString *text) {
            PBEditTextController *editTextVC = [[PBEditTextController alloc] init];
            editTextVC.text = text;
            editTextVC.titleText = issueAddModel.title;
            editTextVC.prompt = issueAddModel.prompt;
            editTextVC.CompleteEditTextBlock = ^(NSString *text) {
                issueAddModel.inputStr = text;
                [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:UITableViewRowAnimationNone];
                [self updateCompletionIndicator];
            };
            [self.navigationController pushViewController:editTextVC animated:YES];
        };
        [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
        return cell;
    }else if (indexPath.row == 1) {
        PBIssueAddModel *leftIssueAddModel = self.dataListM[indexPath.row];
        PBIssueAddModel *rightIssueAddModel = self.dataListM[indexPath.row + 1];
        PBChooseTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:chooseCellID forIndexPath:indexPath];
        cell.leftIssueAddModel = leftIssueAddModel;
        cell.rightIssueAddModel = rightIssueAddModel;
        cell.ChooseBlock = ^(NSInteger index) {
            [PBKeyWindow addSubview:self.chooseView];
            if (self.isAddIssue) {
                PBIssueNavModel *navModel = [[PBIssueNavModel alloc] init];
                navModel.ItemName = @"打开";
                leftIssueAddModel.navModel = navModel;
                self.chooseView.leftIssueAddModel = leftIssueAddModel;
            }else {
                self.chooseView.leftIssueAddModel = leftIssueAddModel;
            }
            self.chooseView.rightIssueAddModel = rightIssueAddModel;
            self.chooseView.statusAndTypeData = self.statusAndTypeData;
            self.chooseView.index = index;
            self.chooseView.ChooseCompleteBlock = ^(BOOL isSelectStatus, BOOL isSelectType) {
                if (isSelectStatus == NO & isSelectType == NO) {
                    return;
                }
                [weakSelf updateCompletionIndicator];
                if (weakSelf.isAddIssue) {
                    [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:UITableViewRowAnimationNone];
                }else {
                    if (isSelectStatus) {
                        NSString *statusId = leftIssueAddModel.navModel.ItemDetailId;
                        [weakSelf ModifyIssueStatusWithstateID:statusId andIndexPath:indexPath];
                    }else {
                        NSString *typeID = rightIssueAddModel.navModel.ItemDetailId;
                        [weakSelf ModifyIssueTypeWithTypeID:typeID andIndexPath:indexPath];
                    }
                }
            };
            [self.chooseView show];
        };
        [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
        return cell;
    }else if (indexPath.row == 2) {
        PBIssueAddModel *issueAddModel = self.dataListM[indexPath.row + 1];
        PBPersonTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:personCellID forIndexPath:indexPath];
        cell.issueAddModel = issueAddModel;
        cell.EditPersonBlock = ^{
            [PBKeyWindow addSubview:self.editPersonView];
            self.editPersonView.projectModel = self.projectModel;
            self.editPersonView.issueListModel = self.issueListModel;
            self.editPersonView.issueAddModel = issueAddModel;
            self.editPersonView.EditCompleteBlock = ^{
                [weakSelf updateCompletionIndicator];
                if (weakSelf.isAddIssue) {
                    [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:UITableViewRowAnimationNone];
                }else {
                    [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:UITableViewRowAnimationNone];
//                    NSString *ruserId = nil; NSString *luserId = nil;
//                    NSMutableString *strM = [[NSMutableString alloc] init];
//                    for (PBPersonModel *personModel in issueAddModel.personArr) {
//                        [strM appendFormat:@"%@,",personModel.UserId];
//                    }
//                    if (indexPath.row == 5) {
//                        ruserId = strM.copy;
//                    }else {
//                        luserId = strM.copy;
//                    }
//                    [weakSelf updaIssueWithStatusId:nil andTypeId:nil andRUserIDStr:ruserId andLUserIDStr:luserId andEndDate:nil andViewPoint:nil andDraw:nil andIndexPath:indexPath];
                }
            };
            [self.editPersonView show];
        };
        [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
        return cell;
    }else if (indexPath.row == 3) {
        PBIssueAddModel *issueAddModel = self.dataListM[indexPath.row + 1];
        PBDateTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:dateCellID forIndexPath:indexPath];
        cell.issueAddModel = issueAddModel;
        cell.EditDateBlock = ^{
            [PBKeyWindow addSubview:self.editDateView];
            self.editDateView.IssueAddModel = issueAddModel;
            NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
                [dateFormatter setDateFormat:@"yyyy-MM-dd"];
            if (weakSelf.isAddIssue) {
                self.editDateView.stareDate = [dateFormatter stringFromDate:[NSDate date]];
            }else {
                NSRange range = [self.issueListModel.CreateDate rangeOfString:@"T"];
                self.editDateView.stareDate = [self.issueListModel.CreateDate substringToIndex:range.location];
            }
            self.editDateView.EditCompleteBlock = ^{
                [weakSelf updateCompletionIndicator];
                if (weakSelf.isAddIssue){
                    [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:UITableViewRowAnimationNone];
                }else {
                    [weakSelf ModifyEndDateWithstateDate:issueAddModel.dateStr andIndexPath:indexPath];
                }
            };
            [self.editDateView show];
        };
        [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
        return cell;
    }else if (indexPath.row == 4) {
        PBIssueAddModel *issueAddModel = self.dataListM[indexPath.row + 1];
        PBPersonTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:personCellID forIndexPath:indexPath];
        cell.isLabel = YES;
        cell.issueAddModel = issueAddModel;
        cell.EditPersonBlock = ^{
            [PBKeyWindow addSubview:self.editLabelView];
            self.editLabelView.projectModel = self.projectModel;
            self.editLabelView.issueAddModel = issueAddModel;
            self.editLabelView.EditCompleteBlock = ^{
                if (weakSelf.isAddIssue) {
                    [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:UITableViewRowAnimationNone];
                }else {
                    NSMutableString *strM = [[NSMutableString alloc] init];
                    for (PBTagModel *tagModel in issueAddModel.labelArr) {
                        [strM appendFormat:@"%@,",tagModel.it_guid];
                    }
                    if([strM length] > 0){
                        NSString *tagStr = [strM substringToIndex:([strM length]-1)];
                        [weakSelf OverrideIssueTagWithTagIds:tagStr andIndexPath:indexPath];
                    }else {
                        [weakSelf OverrideIssueTagWithTagIds:@"" andIndexPath:indexPath];
                    }
                }
            };
            [self.editLabelView show];
        };
        [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
        return cell;
    }else {
        NSInteger index = indexPath.row - (self.dataListM.count - 1);
        PBDocModel *docModel = [PBDocModel yy_modelWithDictionary:self.issueDetailModel.relationFiles[index]];
        PBDocListTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:docCellID forIndexPath:indexPath];
        cell.docModel = docModel;
        return cell;
    }
}
//- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
//    if (indexPath.row >= (self.dataListM.count - 1)) {
//        return 64.f;
//    }
//    return 100;
//}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.row >= (self.dataListM.count - 1)) {
        NSInteger index = indexPath.row - (self.dataListM.count - 1);
        PBDocModel *docModel = [PBDocModel yy_modelWithDictionary:self.issueDetailModel.relationFiles[index]];
        if ([[docModel.FileExtensions lowercaseString] isEqualToString:@".dwg"]){
            [self downDwgFileWith:docModel];
        }else if ([[docModel.FileExtensions lowercaseString] isEqualToString:@".mp4"] || [[docModel.FileExtensions lowercaseString] isEqualToString:@".mp3"]){
            [self downFileWith:docModel];
//        }else if ([[docModel.FileExtensions lowercaseString] isEqualToString:@".pdf"]){
//            [self downPDFFileWith:docModel];
        }else {
            NSString *downUrl = [NSString stringWithFormat:@"%@/api/Doc/GetHideFile?ProjectID=%@&FileId=%@&FileType=Issue",BimUrl,self.projectModel.bimcomposerid,docModel.FileId];
            NSString *downUrlUtF8 = [downUrl stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet characterSetWithCharactersInString:@":/?=&"].invertedSet];
            NSString *firstUrl = [NSString stringWithFormat:@"%@/api/DocViewer/Viewer/Show?downloadUrl=%@&tempNameAfterDownload=%@", BaseUrl,downUrlUtF8 ,docModel.FileName];
            NSString *docUrl = [NSString stringWithFormat:@"%@/Content/PDFJS/web/Viewer.html?file=%@", BaseUrl, [firstUrl stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet characterSetWithCharactersInString:@".:/?=&%"].invertedSet]];
            
            
            
            
            PBPreviewDocViewController *previewDocVC  = [[PBPreviewDocViewController alloc] init];
            previewDocVC.projectModel = self.projectModel;
            previewDocVC.name = docModel.FileName;
            previewDocVC.docUrl = docUrl;
            previewDocVC.modalPresentationStyle = UIModalPresentationFullScreen;
            [self presentViewController:previewDocVC animated:NO completion:nil];
        }
    }
}
- (void)downFileWith:(PBDocModel *)docModel {
    NSString *folderPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
    NSFileManager * manager = [NSFileManager defaultManager];
    if (![manager fileExistsAtPath :folderPath]){
        [self downLoadFileWith:docModel];
        return;
    }
    NSEnumerator *childFilesEnumerator = [[manager subpathsAtPath :folderPath] objectEnumerator];
    NSString * fileName;
    NSString * fileAbsolutePath = nil;
    while ((fileName = [childFilesEnumerator nextObject]) != nil ){
        if ([fileName isEqualToString:[NSString stringWithFormat:@"%@%@",docModel.FileId, docModel.FileExtensions]]) {
            fileAbsolutePath = [folderPath stringByAppendingPathComponent :fileName];
        }
    }
    if (fileAbsolutePath == nil) {
        [self downLoadFileWith:docModel];
    }else {
        PBPreviewDocViewController *previewDocVC  = [[PBPreviewDocViewController alloc] init];
        previewDocVC.path = fileAbsolutePath;
        previewDocVC.name = docModel.FileName;
        previewDocVC.modalPresentationStyle = UIModalPresentationFullScreen;
        [self presentViewController:previewDocVC animated:NO completion:nil];
    }
}
- (void)downLoadFileWith:(PBDocModel *)docModel {
    [YJProgressHUD showProgress:@"正在下载文件" inView:self.view];
    [[PBNetworkTools sharedTools] RequestDownLoadDwgFileWithProjectID:self.projectModel.bimcomposerid andFileID:docModel.FileId andExtension:docModel.FileExtensions andCallBack:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
        if (error) {
            [YJProgressHUD showMessage:@"下载失败" inView:nil];
            NSLog(@"%@",error);
            return;
        }
        NSLog(@"filePath:%@",filePath);
        NSString *str = [filePath absoluteString];
        str = [str stringByReplacingOccurrencesOfString:@"file://" withString:@""];
        [YJProgressHUD hide];
        PBPreviewDocViewController *previewDocVC  = [[PBPreviewDocViewController alloc] init];
        previewDocVC.path = str;
        previewDocVC.name = docModel.FileName;
        previewDocVC.modalPresentationStyle = UIModalPresentationFullScreen;
        [self presentViewController:previewDocVC animated:NO completion:nil];
    }];
}
//- (void)downPDFFileWith:(PBDocModel *)docModel {
//    NSString *folderPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
//        NSFileManager * manager = [NSFileManager defaultManager];
//        if (![manager fileExistsAtPath :folderPath]){
//            [self downLoadPDfFileWith:docModel.FileId andName:docModel.FileName];
//            return;
//        }
//        NSEnumerator *childFilesEnumerator = [[manager subpathsAtPath :folderPath] objectEnumerator];
//        NSString * fileName;
//        NSString * fileAbsolutePath = nil;
//        while ((fileName = [childFilesEnumerator nextObject]) != nil ){
//            if ([fileName isEqualToString:[NSString stringWithFormat:@"%@.pdf",docModel.FileId]]) {
//                fileAbsolutePath = [folderPath stringByAppendingPathComponent :fileName];
//            }
//        }
//        if (fileAbsolutePath == nil) {
//            [self downLoadPDfFileWith:docModel.FileId andName:docModel.FileName];
//        }else {
//            PBPreviewDocViewController *previewDocVC  = [[PBPreviewDocViewController alloc] init];
//            previewDocVC.path = fileAbsolutePath;
//            previewDocVC.name = docModel.FileName;
//            previewDocVC.modalPresentationStyle = UIModalPresentationFullScreen;
//            [self presentViewController:previewDocVC animated:NO completion:nil];
//        }
//}
//- (void)downLoadPDfFileWith:(NSString *)fileID andName:(NSString *)name {
//    [YJProgressHUD showProgress:@"正在下载文件" inView:self.view];
//    [[PBNetworkTools sharedTools] RequestDownLoadDwgFileWithProjectID:self.projectModel.bimcomposerid andFileID:fileID andExtension:@".pdf" andCallBack:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
//        if (error) {
//            [YJProgressHUD showMessage:@"下载失败" inView:nil];
//            NSLog(@"%@",error);
//            return;
//        }
//        NSLog(@"filePath:%@",filePath);
//        NSString *str = [filePath absoluteString];
//        str = [str stringByReplacingOccurrencesOfString:@"file://" withString:@""];
//        [YJProgressHUD hide];
//        PBPreviewDocViewController *previewDocVC  = [[PBPreviewDocViewController alloc] init];
//        previewDocVC.path = str;
//        previewDocVC.name = name;
//        previewDocVC.modalPresentationStyle = UIModalPresentationFullScreen;
//        [self presentViewController:previewDocVC animated:NO completion:nil];
//    }];
//}
- (void)downDwgFileWith:(PBDocModel *)docModel {
    NSString *folderPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
    NSFileManager * manager = [NSFileManager defaultManager];
    if (![manager fileExistsAtPath :folderPath]){
        [self downLoadDwgFileWith:docModel.FileId];
        return;
    }
    NSEnumerator *childFilesEnumerator = [[manager subpathsAtPath :folderPath] objectEnumerator];
    NSString * fileName;
    NSString * fileAbsolutePath = nil;
    while ((fileName = [childFilesEnumerator nextObject]) != nil ){
        if ([fileName isEqualToString:[NSString stringWithFormat:@"%@.dwg",docModel.FileId]]) {
            fileAbsolutePath = [folderPath stringByAppendingPathComponent :fileName];
        }
    }
    if (fileAbsolutePath == nil) {
        [self downLoadDwgFileWith:docModel.FileId];
    }else {
//        DwgViewController *destViewController = [DwgViewController new];
        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"DwgViewController" bundle:nil];
        DwgViewController *destViewController = [storyboard instantiateInitialViewController];
        destViewController.cadFileName = fileAbsolutePath;
        destViewController.modalPresentationStyle = UIModalPresentationFullScreen;
        [self presentViewController:destViewController animated:YES completion:nil];
        
    }
}
- (void)downLoadDwgFileWith:(NSString *)fileID {
    [YJProgressHUD showProgress:@"正在下载DWG文件" inView:self.view];
    [[PBNetworkTools sharedTools] RequestDownLoadIssueDwgFileWithProjectID:self.projectModel.bimcomposerid andFileID:fileID andExtension:@".dwg" andCallBack:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
        if (error) {
            [YJProgressHUD showMessage:@"下载失败" inView:nil];
            NSLog(@"%@",error);
            return;
        }
        NSLog(@"filePath:%@",filePath);
        NSString *str = [filePath absoluteString];
        str = [str stringByReplacingOccurrencesOfString:@"file://" withString:@""];
        [YJProgressHUD hide];
        DwgViewController *destViewController = [DwgViewController new];
        destViewController.cadFileName = str;
        destViewController.modalPresentationStyle = UIModalPresentationFullScreen;
        [self presentViewController:destViewController animated:YES completion:nil];
    }];
}
- (void)ModifyIssueTypeWithTypeID:(NSString *)typeID andIndexPath:(NSIndexPath *)indexPath {
    [YJProgressHUD showProgress:@"" inView:self.view];
    [[PBNetworkTools sharedTools] ModifyIssueTypeWithIssueID:self.issueListModel.IssueId andID:typeID andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
        if (error) {
            NSLog(@"%@",error);
            [YJProgressHUD showMessage:@"修改失败" inView:self.view];
            return;
        }
        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
        if (networkModel.Ret == 1) {
            [YJProgressHUD hide];
            [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:UITableViewRowAnimationNone];
        }else {
            [YJProgressHUD showMessage:@"修改失败" inView:self.view];
        }
    }];
}
- (void)ModifyIssueStatusWithstateID:(NSString *)stateID andIndexPath:(NSIndexPath *)indexPath {
    [YJProgressHUD showProgress:@"" inView:self.view];
    [[PBNetworkTools sharedTools] ModifyIssueStatusWithIssueID:self.issueListModel.IssueId andID:stateID andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
        if (error) {
            NSLog(@"%@",error);
            [YJProgressHUD showMessage:@"修改失败" inView:self.view];
            return;
        }
        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
        if (networkModel.Ret == 1) {
            [YJProgressHUD hide];
            [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:UITableViewRowAnimationNone];
        }else {
            [YJProgressHUD showMessage:@"修改失败" inView:self.view];
        }
    }];
}
- (void)ModifyEndDateWithstateDate:(NSString *)date andIndexPath:(NSIndexPath *)indexPath {
    [YJProgressHUD showProgress:@"" inView:self.view];
    [[PBNetworkTools sharedTools] ModifyIssueEndDateWithIssueID:self.issueListModel.IssueId andEndData:date andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
        if (error) {
            NSLog(@"%@",error);
            [YJProgressHUD showMessage:@"修改失败" inView:self.view];
            return;
        }
        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
        if (networkModel.Ret == 1) {
            [YJProgressHUD hide];
            [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:UITableViewRowAnimationNone];
        }else {
            [YJProgressHUD showMessage:@"修改失败" inView:self.view];
        }
    }];
}
- (void)OverrideIssueTagWithTagIds:(NSString *)tagIds andIndexPath:(NSIndexPath *)indexPath {
    [YJProgressHUD showProgress:@"" inView:self.view];
    [[PBNetworkTools sharedTools] OverrideIssueTagWithIssueID:self.issueListModel.IssueId andRit_tagIds:tagIds andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
        if (error) {
            NSLog(@"%@",error);
            [YJProgressHUD showMessage:@"修改标签失败" inView:self.view];
            return;
        }
        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
        if (networkModel.Ret == 1) {
            [YJProgressHUD hide];
            [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:UITableViewRowAnimationNone];
        }else {
            [YJProgressHUD showMessage:@"修改标签失败" inView:self.view];
        }
    }];
}


- (void)updaIssueWithStatusId:(NSString *)statusId andTypeId:(NSString *)typeId andRUserIDStr:(NSString *)ruserIDs andLUserIDStr:(NSString *)luserIDs andEndDate:(NSString *)endDate andViewPoint:(NSDictionary *)viewPointDic andDraw:(NSDictionary *)drawDic andIndexPath:(NSIndexPath *)indexPath {
    if ([self.issueListModel.DeleteMark isEqualToString:@"2"]) {
        [YJProgressHUD showMessage:@"已归档，无法修改" inView:self.view];
        return;
    }
    [YJProgressHUD showProgress:@"" inView:self.view];
    [[PBNetworkTools sharedTools] RequestUpdateIssueWithIssueID:self.issueListModel.IssueId andIssueStatusID:statusId andIssueTypeID:typeId andRUserIDStr:ruserIDs andLUserIDStr:luserIDs andEndDate:endDate andViewPoint:viewPointDic andDraw:drawDic andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
        if (error) {
            NSLog(@"%@",error);
            [YJProgressHUD showMessage:@"修改失败" inView:self.view];
            return;
        }
        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
        if ([str isEqualToString:@"success"]) {
            [YJProgressHUD hide];
            [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:UITableViewRowAnimationNone];
            
        }else {
            [YJProgressHUD showMessage:@"修改失败" inView:self.view];
        }
    }];
}

- (void)takePhotoLibrary {
    PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
    if (status == PHAuthorizationStatusNotDetermined) {//未作出回应
        [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
            if(status == PHAuthorizationStatusAuthorized) {
                dispatch_async(dispatch_get_main_queue(), ^{//用户点击ok
                    [self pushLFImagePickerController];
                });
            } else {
                dispatch_async(dispatch_get_main_queue(), ^{//点击不允许访问
                    NSLog(@"点击不允许访问");
                });
            }
        }];
    }else if (status == PHAuthorizationStatusRestricted) {//没有被授权访问 可能家长控制

    }else if (status == PHAuthorizationStatusDenied) {//已明确否认相册权限
        UIAlertController * alertController = [UIAlertController alertControllerWithTitle:@"无法访问相册" message:@"请在iPhone的""设置-隐私-相册""中允许访问相册" preferredStyle:UIAlertControllerStyleAlert];
        UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
        UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"设置" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
            if (@available(iOS 10.0, *)) {
                [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString] options:@{} completionHandler:nil];
            } else {
                NSLog(@"选择取消");
            }
        }];
        [alertController addAction:cancelAction];
        [alertController addAction:okAction];
        [self presentViewController:alertController animated:YES completion:nil];
    }else if (status == PHAuthorizationStatusAuthorized){//有权限访问
        [self pushLFImagePickerController];
    }
}

- (void)pushLFImagePickerController {
    NSInteger maxImageCount = 9;
    if (!self.isAddIssue) {
        maxImageCount = 9 - self.associatedDocs.count;
    }else {
        maxImageCount = 9 - self.selectedPhotos.count;
    }
    LFImagePickerController *imagePicker = [[LFImagePickerController alloc] initWithMaxImagesCount:maxImageCount delegate:self];
    imagePicker.allowTakePicture = YES;//内部显示相机
    imagePicker.isSelectOriginalPhoto = YES;//是否选择原图
    imagePicker.allowPickingType = LFPickingMediaTypePhoto;//用户是否可以选择视频
    imagePicker.allowPickingOriginalPhoto = NO;//原图按钮将隐藏，用户将不能发送原图
    imagePicker.maxPhotoBytes = 1024 * 1024 * 100;//最大图片所选字节大小
    if (self.isAddIssue) {
//        imagePicker.selectedAssets = self.selectedAssets;
    }
    if ([UIDevice currentDevice].systemVersion.floatValue >= 8.0f) {
        imagePicker.syncAlbum = YES; /** 实时同步相册 */
    }
    [self presentViewController:imagePicker animated:YES completion:nil];
}

- (void)lf_imagePickerController:(LFImagePickerController *)picker didFinishPickingResult:(NSArray <LFResultObject /* <LFResultImage/LFResultVideo> */*> *)results {
    NSMutableArray *imageArrM = [[NSMutableArray alloc] init];
//    NSMutableArray *assetsArrM = [[NSMutableArray alloc] init];
    for (NSInteger i = 0; i < results.count; i++) {
        LFResultObject *result = results[i];
        if ([result isKindOfClass:[LFResultImage class]]){
            LFResultImage *resultImage = (LFResultImage *)result;
            NSData *imageData = UIImageJPEGRepresentation(resultImage.originalImage, 0.5);
            UIImage *originalImage = [UIImage imageWithData:imageData];
            [imageArrM addObject:originalImage];
//            [assetsArrM addObject:result.asset];
        }
    }
    if (_isAddIssue) {
//        self.selectedAssets = assetsArrM;
        [self.selectedPhotos addObjectsFromArray:imageArrM.copy];
        [self setTableViewHeaderView];
    }else {
        [self uploadFileWithFile:imageArrM.copy];
    }
}

- (void)deleteRelationImageWithIndex:(NSInteger)index {
    UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"确定删除？" message:@"" preferredStyle:UIAlertControllerStyleAlert];
    UIAlertAction *cancelAction  = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
    UIAlertAction *determineAction  = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        [YJProgressHUD showProgress:@"" inView:self.view];
        NSDictionary *dict = self.associatedDocs[index];
        [[PBNetworkTools sharedTools] RemoveIssueDocRelWithIssueID:self.issueListModel.IssueId andFileId:[dict valueForKey:@"bf_guid"] andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
            if (error) {
                [YJProgressHUD showMessage:@"删除失败" inView:self.view];
                return;
            }
            NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
            PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
            if (networkModel.Ret == 1) {
                [YJProgressHUD hide];
                [self.associatedDocs removeObjectAtIndex:index];
                [self setTableViewHeaderView];
            }else {
                [YJProgressHUD showMessage:@"删除失败" inView:self.view];
            }
        }];
    }];
    [alertVC addAction:cancelAction];
    [alertVC addAction:determineAction];
    [self presentViewController:alertVC animated:YES completion:nil];
}


- (void)setIsAddIssue:(BOOL)isAddIssue {
    _isAddIssue = isAddIssue;
    if (_isAddIssue) {
        self.title = @"新建问题";
    }else {
        self.title = @"详情";
    }
}

- (void)setIssueListModel:(PBIssueListModel *)issueListModel {
    _issueListModel = issueListModel;
}
- (NSMutableArray *)imageDocArr {
    if (_imageDocArr == nil) {
        _imageDocArr = [[NSMutableArray alloc] init];
    }
    return _imageDocArr;
}

- (PBChooseView *)chooseView {
    if (_chooseView == nil) {
        _chooseView  = [[PBChooseView alloc] initWithFrame:[UIScreen mainScreen].bounds];
        _chooseView.visualViewHeight = 468.f;
        _chooseView.isAdd = self.isAddIssue;
    }
    return _chooseView;
}
- (PBEditPersonView *)editPersonView {
    if (_editPersonView == nil) {
        _editPersonView = [[PBEditPersonView alloc] initWithFrame:[UIScreen mainScreen].bounds];
        CGFloat bottomH = 0.f;
        if (IS_IPHONE_X) {
            bottomH = 34.f;
        }
        _editPersonView.visualViewHeight = 468.f + bottomH;
    }
    return _editPersonView;
}
- (PBEditLableView *)editLabelView {
    if (_editLabelView == nil) {
        _editLabelView = [[PBEditLableView alloc] initWithFrame:[UIScreen mainScreen].bounds];
        CGFloat bottomH = 0.f;
        if (IS_IPHONE_X) {
            bottomH = 34.f;
        }
        _editLabelView.visualViewHeight = 465.f + bottomH;;
    }
    return _editLabelView;
}
- (PBEditDateView *)editDateView {
    if (_editDateView == nil) {
        _editDateView = [[PBEditDateView alloc] initWithFrame:[UIScreen mainScreen].bounds];
        _editDateView.visualViewHeight = 468.f;
    }
    return _editDateView;
}
- (NSMutableArray *)selectedPhotos {
    if (_selectedPhotos == nil) {
        _selectedPhotos = [[NSMutableArray alloc] init];
    }
    return _selectedPhotos;
}
- (NSMutableArray *)selectedAssets {
    if (_selectedAssets == nil) {
        _selectedAssets = [[NSMutableArray alloc] init];
    }
    return _selectedAssets;
}
- (NSMutableArray *)associatedDocs {
    if (_associatedDocs == nil) {
        _associatedDocs = [[NSMutableArray alloc] init];
    }
    return _associatedDocs;
}
- (void)setStatusAndTypeData:(NSDictionary *)statusAndTypeData {
    _statusAndTypeData = statusAndTypeData;
}

- (void)setProjectModel:(PBProjectModel *)projectModel {
    _projectModel = projectModel;
}

- (void)setViewPointStr:(NSString *)viewPointStr {
    _viewPointStr = viewPointStr;
}
- (void)setBase64Image:(NSString *)base64Image {
    _base64Image = base64Image;
}

- (void)setModelID:(NSString *)modelID {
    _modelID = modelID;
}
- (void)dealloc {
    [PBNoteCenter removeObserver:self];
}



/*
// Override to support conditional editing of the table view.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    // Return NO if you do not want the specified item to be editable.
    return YES;
}
*/

/*
// Override to support editing the table view.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        // Delete the row from the data source
        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
    } else if (editingStyle == UITableViewCellEditingStyleInsert) {
        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
    }
}
*/

/*
// Override to support rearranging the table view.
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
}
*/

/*
// Override to support conditional rearranging of the table view.
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
    // Return NO if you do not want the item to be re-orderable.
    return YES;
}
*/

/*
#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.
}
*/

@end
