//
//  PEMarkTestView.m
//  RNImageProssingView
//
//  Created by Hanson on 2019/6/26.
//  Copyright © 2019 Facebook. All rights reserved.
//

#import "PEMarkView.h"
#import "PEMarkImageView.h"
#import "UIView+Frame.h"
#import "UIImage+Extenstion.h"

@interface PEMarkView()<PEMarkImageViewDelegate>

@property (strong, nonatomic) UIButton *closeButton;
@property (strong, nonatomic) PEMarkImageView *editView;

@end


@implementation PEMarkView

- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        [self setupUI];
        self.multipleTouchEnabled = YES;
        
        [self addPinchGesture];
        [self addRotationGesture];
    }
    return self;
}


- (void)setupUI {
    self.closeButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [self.closeButton addTarget:self action:@selector(removeEditImageView) forControlEvents:UIControlEventTouchUpInside];
    UIColor *bgColor = [UIColor colorWithRed:39/255.0 green:56/255.0 blue:75/255.0 alpha:1];
    [self.closeButton setTitle:@"X" forState:UIControlStateNormal];
    self.closeButton.backgroundColor = bgColor;
    self.closeButton.layer.cornerRadius = 15;
    self.closeButton.clipsToBounds = YES;
    self.closeButton.titleLabel.font = [UIFont systemFontOfSize:17];
    [self.closeButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    [self addSubview:self.closeButton];
    
    self.closeButton.frame = CGRectMake(0, 0, 30, 30);
    self.closeButton.hidden = YES;
}

#pragma mark - MarkImageView

- (void)addMarkImage:(UIImage *)image {
    PEMarkImageView *view = [[PEMarkImageView alloc] init];
    view.image = image;
    [view sizeToFit];
    if (view.bounds.size.width > 100) {
        CGFloat sale = view.width / 100;
        view.height = view.height / sale;
        view.width = 100;
    }
    view.center = CGPointMake(self.width * 0.5, self.height * 0.5);
    view.delegate = self;
    self.editView = view;
    [self addSubview:view];
    [self layoutIfNeeded];
}

- (BOOL)markViewImageViewEdit:(PEMarkImageView *)markView {
    self.editView = markView;
    return YES;
}

- (void)rotationClick {
    [self.editView rotation];
}

- (void)markViewUpdateFrameWithScal:(CGFloat)scal {
    self.closeButton.right = self.editView.left;
    self.closeButton.bottom = self.editView.top;
    
    CGFloat width = self.editView.bounds.size.width;
    CGFloat height = self.editView.bounds.size.height;
    self.closeButton.right = self.editView.centerX - width * 0.5 * scal;
    self.closeButton.bottom = self.editView.centerY - height * 0.5 * scal;
}

- (void)setEditView:(PEMarkImageView *)editView {
    _editView = editView;
    [self beginMarkEdit];
    
}


// 图片放大缩小手势
- (void)addPinchGesture {
    UIPinchGestureRecognizer *pinGesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(changeScale:)];
    [self addGestureRecognizer:pinGesture];
    self.multipleTouchEnabled = YES;
}


//图片旋转手势
- (void)addRotationGesture {
    UIRotationGestureRecognizer *rotationGesture = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotateImage:)];
    [self addGestureRecognizer:rotationGesture];
}


- (void)changeScale:(UIPinchGestureRecognizer *)sender {
    
    UIView *view = self.editView;
    if (sender.state == UIGestureRecognizerStateBegan ||
        sender.state == UIGestureRecognizerStateChanged) {
        view.transform = CGAffineTransformScale(view.transform, sender.scale, sender.scale);
        self.editView.scal *= sender.scale;
        sender.scale = 1.0;
        [self markViewUpdateFrameWithScal:self.editView.scal];
    }
}


- (void)rotateImage:(UIRotationGestureRecognizer *)sender {
    
    UIView *view = self.editView;
    if (sender.state == UIGestureRecognizerStateBegan ||
        sender.state == UIGestureRecognizerStateChanged) {
        view.transform = CGAffineTransformRotate(view.transform, sender.rotation);
        [sender setRotation:0];
    }
}

#pragma mark - layout

- (void)beginMarkEdit {
    self.closeButton.hidden = NO;
    [self markViewUpdateFrameWithScal:self.editView.scal];
    [self bringSubviewToFront:self.closeButton];
}

- (void)endMarkEdit {
    self.closeButton.hidden = YES;
}

- (void)cleanMarkImage {
    [self endMarkEdit];
    for (UIView *view in self.subviews) {
        [view removeFromSuperview];
    }
    [self addSubview:self.closeButton];
}

- (void)removeEditImageView {
    if (self.editView) {
        [self endMarkEdit];
        [self.editView removeFromSuperview];
    }
}

@end
