package com.kmall.common.utils.file;

import com.kmall.common.fileserver.util.FileManager;
import com.kmall.common.utils.R;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItem;
import org.apache.commons.io.IOUtils;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.protocol.HTTP;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;

import java.io.*;
import java.nio.file.Files;

/**
 * @author huangyq
 * @version 1.0
 * 2019-04-29 14:50
 */
public class FileUploadUtil {

    public static String getUploadUrl(String mapToXml, String token, Integer id){

        try {
            CloseableHttpClient httpClient = HttpClientBuilder.create().build();
            HttpPost httpPost = new HttpPost("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="+ token);
            httpPost.addHeader(HTTP.CONTENT_TYPE, "application/json");
            StringEntity entity = new StringEntity(mapToXml);
            entity.setContentType("image/png");

            httpPost.setEntity(entity);
            HttpResponse response = httpClient.execute(httpPost);
            InputStream inputStream = response.getEntity().getContent();

            String fileName = System.currentTimeMillis() + "_" + id +".png";
            String dirName = "\\upload";
            File dirFile = new File(dirName);
            //删除之前的图片文件夹
            deleteFile(dirFile);
            if(!dirFile.exists()){
                dirFile.mkdirs();
            }

            File file = new File(dirName, fileName);// 可以是任何图片格式.jpg,.png等
            FileOutputStream fos = new FileOutputStream(file);
            if (inputStream != null) {
                try {
                    byte[] b = new byte[1024];
                    int nRead = 0;
                    while ((nRead = inputStream.read(b)) != -1) {
                        fos.write(b, 0, nRead);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {

                    try {
                        fos.flush();
                        fos.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            FileItem fileItem = new DiskFileItem("mainFile", Files.probeContentType(file.toPath()), false,
                    file.getName(), (int) file.length(), file.getParentFile());
            try (InputStream input = new FileInputStream(file); OutputStream os = fileItem.getOutputStream();) {
                IOUtils.copy(input, os);
                MultipartFile multipartFile = new CommonsMultipartFile(fileItem);
                String url = FileManager.upload(multipartFile);
                return url;
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return "";
    }


    private static void deleteFile(File dirFile){
        if(dirFile.exists()){
            if(dirFile.isFile()){
                dirFile.delete();
            }else {
                for(File file:dirFile.listFiles()){
                    deleteFile(file);
                }
            }
        }
    }
}
