ReportController.m 7.6 KB
//
//  ReportController.m
//  DreamSleep
//
//  Created by peter on 2022/10/10.
//

#import "ReportController.h"
#import "ReportView.h"
#import "FeedbackRequestModel.h"
#import "TZImagePickerController.h"

// 最大图片上传数量
static int MaxUpdateImgCount = 3;
// 相册显示列数
static int AlbumColumnCount = 4;

@interface ReportController () <ReportViewDelegate, TZImagePickerControllerDelegate>
@property (nonatomic, strong) ReportView *reportView;
@property (nonatomic, strong) ReportViewModel *reportVM;
@property (nonatomic, assign) BOOL isSelectOriginalPhoto;
@property (nonatomic, copy) NSString *result_imgurls;
@end

@implementation ReportController

- (void)loadView {
    self.view = self.reportView;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.navigationItem.title = @"举报证据";
}

#pragma mark - ReportViewDelegate
- (void)openAlbum {
    if (MaxUpdateImgCount <= 0) { return; }
    
    TZImagePickerController *imagePickerVc = [[TZImagePickerController alloc] initWithMaxImagesCount:MaxUpdateImgCount columnNumber:AlbumColumnCount delegate:self pushPhotoPickerVc:NO];
    imagePickerVc.isSelectOriginalPhoto = self.isSelectOriginalPhoto;
    imagePickerVc.naviBgColor = [self.dk_manager.themeVersion isEqualToString:DKThemeVersionNight] ? SubNaviDarkColor : BrandColor;
    // 设置目前已经选中的图片数组
    if (MaxUpdateImgCount > 1) { imagePickerVc.selectedAssets = self.reportVM.selectedAssets; }
    // 在内部显示拍照按钮
    imagePickerVc.allowTakePicture = YES;
    imagePickerVc.iconThemeColor = ColorFromRGBA(31.0, 185.0, 34.0, 1.0);
    imagePickerVc.showPhotoCannotSelectLayer = YES;
    imagePickerVc.cannotSelectLayerColor = [DSWhite colorWithAlphaComponent:0.8];
    // 设置是否可以选择视频/图片/原图
    imagePickerVc.allowPickingVideo = NO;
    imagePickerVc.allowPickingImage = YES;
    imagePickerVc.allowPickingOriginalPhoto = NO;
    imagePickerVc.allowPickingGif = NO;
    // 是否可以多选视频
    imagePickerVc.allowPickingMultipleVideo = NO;
    // 照片排列按修改时间升序
    imagePickerVc.sortAscendingByModificationDate = YES;
    imagePickerVc.showSelectBtn = NO;
    imagePickerVc.allowCrop = NO;
    imagePickerVc.needCircleCrop = NO;
    // 设置竖屏下的裁剪尺寸
    NSInteger left = 30;
    NSInteger widthHeight = self.view.width - 2 * left;
    NSInteger top = (self.view.height - widthHeight) / 2;
    imagePickerVc.cropRect = CGRectMake(left, top, widthHeight, widthHeight);
    // 设置是否显示图片序号
    imagePickerVc.showSelectedIndex = YES;
    imagePickerVc.autoDismiss = NO;
    // 你可以通过block或者代理,来得到用户选择的照片.
    __weak TZImagePickerController *weakPicker = imagePickerVc;
    [imagePickerVc setDidFinishPickingPhotosHandle:^(NSArray<UIImage *> *photos, NSArray *assets, BOOL isSelectOriginalPhoto) {
        if (photos.count) { [self uploadImgsWithPhotos:photos picker:weakPicker]; }
    }];
    [self presentViewController:imagePickerVc animated:YES completion:nil];
}

- (void)previewPicture:(NSIndexPath *)indexPath {
    id asset = self.reportVM.selectedAssets[(indexPath.row - 1)];
    BOOL isVideo = NO;
    if ([asset isKindOfClass:[PHAsset class]]) {
        PHAsset *phAsset = asset;
        isVideo = phAsset.mediaType == PHAssetMediaTypeVideo;
    }
    
    TZImagePickerController *imagePickerVc = [[TZImagePickerController alloc] initWithSelectedAssets:self.reportVM.selectedAssets selectedPhotos:self.reportVM.selectedPhotos index:(indexPath.row - 1)];
    __weak TZImagePickerController * weakPicker = imagePickerVc;
    imagePickerVc.maxImagesCount = MaxUpdateImgCount;
    imagePickerVc.allowPickingOriginalPhoto = NO;
    imagePickerVc.allowPickingMultipleVideo = NO;
    imagePickerVc.showSelectedIndex = YES;
    imagePickerVc.isSelectOriginalPhoto = self.isSelectOriginalPhoto;
    WS(weakSelf);
    [imagePickerVc setDidFinishPickingPhotosHandle:^(NSArray<UIImage *> *photos, NSArray *assets, BOOL isSelectOriginalPhoto) {
        weakSelf.reportVM.selectedPhotos = [NSMutableArray arrayWithArray:photos];
        weakSelf.reportVM.selectedAssets = [NSMutableArray arrayWithArray:assets];
        weakSelf.isSelectOriginalPhoto = isSelectOriginalPhoto;
        [weakSelf.reportView refreshImageContentView];
        [weakPicker dismissViewControllerAnimated:YES completion:nil];
    }];
    [self presentViewController:imagePickerVc animated:YES completion:nil];
}

- (void)deletePicture:(NSInteger)tag {
    [self.reportVM.selectedPhotos removeObjectAtIndex:tag];
    [self.reportVM.selectedAssets removeObjectAtIndex:tag];
    [self.reportView refreshAfterDelete:tag];
}

- (void)submitReport {
    [DSProgressHUD showProgressHUDWithInfo:@""];
    [self.reportVM userReportDynamicWithTalkID:self.talkID completion:^(ReportViewModel * _Nonnull viewModel) {
        [DSProgressHUD dissmissProgressHUD];
        if (viewModel.resCode == DSResCodeSuccess) {
            [self.navigationController popViewControllerAnimated:YES];
        } else {
            [DSProgressHUD showToast:viewModel.errMessage];
        }
    }];
}

#pragma mark - TZImagePickerControllerDelegate
- (void)imagePickerController:(TZImagePickerController *)picker didFinishPickingPhotos:(NSArray<UIImage *> *)photos sourceAssets:(NSArray *)assets isSelectOriginalPhoto:(BOOL)isSelectOriginalPhoto infos:(NSArray<NSDictionary *> *)infos {
    self.reportVM.selectedPhotos = [NSMutableArray arrayWithArray:photos];
    self.reportVM.selectedAssets = [NSMutableArray arrayWithArray:assets];
    self.isSelectOriginalPhoto = isSelectOriginalPhoto;
    [self.reportView refreshImageContentView];
}

- (void)imagePickerController:(TZImagePickerController *)picker didFinishPickingGifImage:(UIImage *)animatedImage sourceAssets:(id)asset {
    self.reportVM.selectedPhotos = [NSMutableArray arrayWithArray:@[animatedImage]];
    self.reportVM.selectedAssets = [NSMutableArray arrayWithArray:@[asset]];
    [self.reportView refreshImageContentView];
}

- (BOOL)isAlbumCanSelect:(NSString *)albumName result:(id)result {
    return YES;
}

- (void)tz_imagePickerControllerDidCancel:(TZImagePickerController *)picker {
    [self dismissViewControllerAnimated:YES completion:nil];
}

#pragma mark - 图片上传
- (void)uploadImgsWithPhotos:(NSArray<UIImage *> *)photos picker:(TZImagePickerController *)picker {
    // 1、处理图片
    NSMutableString *mstr = [NSMutableString string];
    [mstr appendString:@"["];
    for (int index = 0; index < photos.count; index++) {
        UIImage *img = photos[index];
        NSString *base64Str = [UIImage imageToBase64Str:img];
        NSString *sepStr = (index == (photos.count - 1)) ? @"" : @",";
        [mstr appendString:[NSString stringWithFormat:@"\"%@\"%@", base64Str, sepStr]];
    }
    [mstr appendString:@"]"];
    // 2、上传图片
    [DSProgressHUD showProgressHUDWithInfo:@""];
    [FeedbackRequestModel uploadBulkImagesWithImgStr:[mstr copy] completion:^(FeedbackRequestModel * _Nonnull requestModel) {
        [DSProgressHUD dissmissProgressHUD];
        if (requestModel.resCode == DSResCodeSuccess) {
            self.reportVM.imgUrls = [requestModel.result_imgurls stringByReplacingOccurrencesOfString:@"," withString:@"|"];
            [picker dismissViewControllerAnimated:YES completion:nil];
        }
    }];
}

#pragma mark - 品牌模式
- (NaviStyle)navigationBarStyle {
    return NaviStyleDefault;
}

#pragma mark - lazy
- (ReportView *)reportView {
    if (!_reportView) {
        _reportView = [[ReportView alloc] initWithDelegate:self reportViewModel:self.reportVM];
    }
    return _reportView;
}

- (ReportViewModel *)reportVM {
    if (!_reportVM) {
        _reportVM = [ReportViewModel new];
    }
    return _reportVM;
}

@end