package ${vhGrpcBuilder_packageName}.${vhGrpcBuilder_sprojectName}.util;

import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.net.URL;
import java.util.concurrent.Callable;
import java.util.concurrent.ConcurrentHashMap;

import javax.imageio.ImageIO;

import org.apache.commons.io.FilenameUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class UploadRotateImageUtil implements Callable<ConcurrentHashMap<String, String>>  {

	private static final Logger logger = LoggerFactory.getLogger(UploadRotateImageUtil.class);
	
	private ConcurrentHashMap<String, String> resultMap;
	private String path;
	private int angle;
	private Long sid;
	private S3Util s3Util;
	
	public UploadRotateImageUtil(ConcurrentHashMap<String, String> resultMap, 
			String path, int angle, Long sid, S3Util s3Util) {
		this.resultMap = resultMap;
		this.path = path;
		this.angle = angle;
		this.sid = sid;
		this.s3Util = s3Util;
	}
	
	public ConcurrentHashMap<String, String> call() {
		String fileName = null;
		byte[] filebytes = null;
		
		try {
			BufferedImage input = ImageIO.read(new URL(path));
			String extension = FilenameUtils.getExtension(path);
			ByteArrayOutputStream baos = new ByteArrayOutputStream();
			ImageIO.write(input, extension, baos);
			filebytes = baos.toByteArray();
			
			int index = path.lastIndexOf("/");
			fileName = path.substring(path.substring(0,index).lastIndexOf("/")+1);
			
		} catch (Exception ex) {
			logger.error("上传文件发生错误,file:{}", fileName, ex);
			throw new RuntimeException();
		}
		String s3FileUrl = s3Util.updateFileGetFullUrl(fileName, filebytes, sid, angle);
		
		resultMap.put("name", s3FileUrl.substring(path.substring(0,path.lastIndexOf("/")).lastIndexOf("/")+1));
		resultMap.put("url", s3FileUrl);
		
		return resultMap;
	}
}
