//
//  ViewController.m
//  OssIOSDemo
//
//  Created by 凌琨 on 15/12/15.
//  Copyright © 2015年 Ali. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "ViewController.h"
#import "ImageService.h"
#import "OssService.h"

@interface ViewController ()
{
    OssService * service;
    OssService * imageService;
    ImageService * imageOperation;
    NSString * uploadFilePath;
    int originConstraintValue;
}

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *inputViewBottom;

@property (weak, nonatomic) IBOutlet UIImageView *ossImageView;
@property (weak, nonatomic) IBOutlet UITextField *ossTextFileName;
@property (weak, nonatomic) IBOutlet UITextField *ossTextWidth;
@property (weak, nonatomic) IBOutlet UITextField *ossTextHeight;
@property (weak, nonatomic) IBOutlet UITextField *ossTextWaterMark;
@property (weak, nonatomic) IBOutlet UITextField *ossTextSize;

@property (weak, nonatomic) IBOutlet UIButton *ossButtonSelectPic;
@property (weak, nonatomic) IBOutlet UIButton *ossButtonCancel;
@property (weak, nonatomic) IBOutlet UIButton *ossButtonNormalPut;
@property (weak, nonatomic) IBOutlet UIButton *ossButtonNormalGet;
@property (weak, nonatomic) IBOutlet UIButton *ossButtonNormalCancel;
@property (weak, nonatomic) IBOutlet UIButton *ossButtonResize;
@property (weak, nonatomic) IBOutlet UIButton *ossButtonWatermark;


- (IBAction)onOssButtonSelectPic:(UIButton *)sender;
- (IBAction)onOssButtonCancel:(UIButton *)sender;
- (IBAction)onOssButtonNormalPut:(UIButton *)sender;
- (IBAction)onOssButtonNormalGet:(UIButton *)sender;
- (IBAction)onOssButtonNormalCancel:(UIButton *)sender;
- (IBAction)onOssButtonResize:(UIButton *)sender;
- (IBAction)onOssButtonWatermark:(UIButton *)sender;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    [self setButtonBorder:_ossButtonSelectPic];
    [self setButtonBorder:_ossButtonCancel];
    [self setButtonBorder:_ossButtonNormalPut];
    [self setButtonBorder:_ossButtonNormalGet];
    [self setButtonBorder:_ossButtonNormalCancel];
    [self setButtonBorder:_ossButtonResize];
    [self setButtonBorder:_ossButtonWatermark];
    
    // init ossService
    service = [[OssService alloc] initWithViewController:self withEndPoint:endPoint];
    [service setCallbackAddress:callbackAddress];
    imageService = [[OssService alloc] initWithViewController:self withEndPoint:imageEndPoint];
    imageOperation = [[ImageService alloc] initImageService:imageService];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

-(void)textFieldDidBeginEditing:(UITextField *)textField {
    
    originConstraintValue = self.inputViewBottom.constant;
    self.inputViewBottom.constant -= 85;
    [UIView animateWithDuration:1 animations:^{
        [self.view layoutIfNeeded];
    }];
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self.view endEditing:YES];
}

-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];
    return YES;
}

-(void)textFieldDidEndEditing:(UITextField *)textField
{
    self.inputViewBottom.constant = originConstraintValue;
}

- (void)setButtonBorder:(UIButton *)button {
    [button.layer setMasksToBounds:YES];
    [button.layer setBorderWidth:1.0];
}

- (void)saveImage:(UIImage *)currentImage withName:(NSString *)imageName {
    NSData *imageData = UIImageJPEGRepresentation(currentImage, 0.5);
    NSString *fullPath = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:imageName];
    [imageData writeToFile:fullPath atomically:NO];
    uploadFilePath = fullPath;
    NSLog(@"uploadFilePath : %@", uploadFilePath);
}

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    [picker dismissViewControllerAnimated:YES completion:^{}];
    UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
    NSLog(@"image width:%f, height:%f", image.size.width, image.size.height);
    [self saveImage:image withName:@"currentImage"];
    [self.ossImageView setImage:image];
    self.ossImageView.tag = 100;
}

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
    [self dismissViewControllerAnimated:YES completion:^{}];
}

- (BOOL)verifyFileName {
    if (_ossTextFileName.text == nil || [_ossTextFileName.text length] == 0) {
        [self showMessage:@"填写错误" inputMessage:@"文件名不能为空！"];
        return NO;
    }
    return YES;
}

- (IBAction)onOssButtonSelectPic:(UIButton *)sender {
    
    NSString * title = @"选择";
    NSString * cancelButtonTitle = @"取消";
    NSString * picButtonTitle = @"拍照";
    NSString * photoButtonTitle = @"从相册选择";
    
    UIAlertController * alert = [UIAlertController alertControllerWithTitle:title message:nil preferredStyle:UIAlertControllerStyleActionSheet];
    
    UIAlertAction * cancelAction = [UIAlertAction actionWithTitle:cancelButtonTitle style:UIAlertActionStyleCancel handler:nil];
    UIAlertAction * picAction = [UIAlertAction actionWithTitle:picButtonTitle style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {
        UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];
        imagePickerController.delegate = self;
        imagePickerController.allowsEditing = YES;
        imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
        [self presentViewController:imagePickerController animated:YES completion:^{}];
    }];
    UIAlertAction * photoAction = [UIAlertAction actionWithTitle:photoButtonTitle style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {
        UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];
        imagePickerController.delegate = self;
        imagePickerController.allowsEditing = YES;
        imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
        [self presentViewController:imagePickerController animated:YES completion:^{}];
    }];
    
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
        [alert addAction:cancelAction];
        [alert addAction:picAction];
        [alert addAction:photoAction];
    } else {
        [alert addAction:cancelAction];
        [alert addAction:photoAction];
    }
    [self presentViewController:alert animated:YES completion:nil];
}

// 取消上传
- (IBAction)onOssButtonCancel:(UIButton *)sender {
    _ossTextFileName.text = @"";
    uploadFilePath = @"";
    [_ossImageView setImage:nil];
}

// 普通上传
- (IBAction)onOssButtonNormalPut:(UIButton *)sender {
    if (![self verifyFileName]) {
        return;
    }
    NSString * objectKey = _ossTextFileName.text;
    [service asyncPutImage:objectKey localFilePath:uploadFilePath];
}

// 普通下载
- (IBAction)onOssButtonNormalGet:(UIButton *)sender {
    if (![self verifyFileName]) {
        return;
    }
    NSString * objectKey = _ossTextFileName.text;
    [service asyncGetImage:objectKey];
}

// 取消普通上传/下载任务
- (IBAction)onOssButtonNormalCancel:(UIButton *)sender {
    if (![self verifyFileName]) {
        return;
    }
    [service normalRequestCancel];
}

// 图片缩放
- (IBAction)onOssButtonResize:(UIButton *)sender {
    if (![self verifyFileName]) {
        return;
    }
    NSString * objectKey = _ossTextFileName.text;
    int width = [_ossTextWidth.text intValue];
    int height = [_ossTextHeight.text intValue];
    [imageOperation reSize:objectKey picWidth:width picHeight:height];
}

// 图片水印
- (IBAction)onOssButtonWatermark:(UIButton *)sender {
    if (![self verifyFileName]) {
        return;
    }
    NSString * objectKey = _ossTextFileName.text;
    NSString * waterMark = _ossTextWaterMark.text;
    int size = [_ossTextSize.text intValue];
    [imageOperation textWaterMark:objectKey waterText:waterMark objectSize:size];
}

/**
 *	@brief	下载后存储并显示图片
 *
 *	@param 	objectData 	图片数据
 *	@param 	objectKey   文件名设置为objectKey
 */
- (void)saveAndDisplayImage:(NSData *)objectData
          downloadObjectKey:(NSString *)objectKey
 {
    NSString *fullPath = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:objectKey];
    [objectData writeToFile:fullPath atomically:NO];
    UIImage * image = [[UIImage alloc] initWithData:objectData];
    uploadFilePath = fullPath;
    [self.ossImageView setImage:image];
    
}

- (void)showMessage:(NSString *)putType
       inputMessage:(NSString*)message {
    UIAlertAction * defaultAction = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:nil];
    UIAlertController * alert = [UIAlertController alertControllerWithTitle:putType message:message preferredStyle:UIAlertControllerStyleAlert];
    [alert addAction:defaultAction];
    [self presentViewController:alert animated:YES completion:nil];
}
@end
