package io.renren.modules.sys.controller;

import java.io.File;
import java.io.IOException;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import io.renren.common.utils.R;

/**
 * Captcha by huwhois time 2019/11/22
 */
@RestController
@RequestMapping("/sys/filemanager")
@Configuration
public class FileManagerController {
    private int errorNumber = 0; // 多图上传错误次数
    @Value("${file.rootpath}")
    private String rootPath; // 读取配置文件中的指定目录
    @Value("${file.uploadFolder}")
    private String uploadFolder; // 读取配置文件中的指定目录

    @PostMapping("/uploadimg")
    public R uploadImage(@RequestParam(value = "upload_file") MultipartFile file, HttpServletRequest request) {

        // 上传的图片只允许是 png、jpg 或 gif 中的格式
        String fileOldName = file.getOriginalFilename();
        if (fileOldName.contains(".png") || fileOldName.contains(".jpg") || fileOldName.contains(".gif")) {
            LocalDateTime ldt = LocalDateTime.now();
            String today = ldt.format(DateTimeFormatter.BASIC_ISO_DATE);

            String absolutePath = rootPath + uploadFolder + "/" + today ; // 目录绝对路径
            // 判断目录是否存在, 如果不存在则自动创建目录
            File createFile = new File(absolutePath);
            if (!createFile.exists()) {
                createFile.mkdir();
            }

            String uuid = UUID.randomUUID().toString().replace("-", "");// 随机生成一个唯一性的id 文件不重名
            String suffix = fileOldName.substring(fileOldName.lastIndexOf(".") + 1);
            // 返回值有问题
            String newFilename =rootPath + uploadFolder + "/" + today + "/" + uuid + "." + suffix;

            try {
                File f = new File(newFilename);
                file.transferTo(f); // 将上传的文件写入到系统中
            } catch (IOException e) {
                e.printStackTrace();
                return R.error("上传文件失败");
            } 
            
            return R.ok().put("filename", uploadFolder + "/" + today + "/" + uuid + "." + suffix);
        } else {
            return R.error("上传文件失败");
        }
    }

    @RequestMapping("/uploadimgs")
    public R filesUpload(@RequestParam("upload_files") MultipartFile[] files, HttpServletRequest request) {
        List<String> list = new ArrayList<String>();
        if (files != null && files.length > 0) {
            for (int i = 0; i < files.length; i++) {
                MultipartFile file = files[i];
                // 保存文件
                list = saveFile(file, list);
            }
        }
        return R.ok().put("data", list).put("errno", getErrorNumber());
    }

    private List<String> saveFile(MultipartFile file, List<String> list) {
        // 判断文件是否为空
        if (!file.isEmpty()) {
            try {
                // 使用配置文件中的指定上传目录与当前年月新建文件夹
                LocalDateTime ldt = LocalDateTime.now();
                String today = ldt.format(DateTimeFormatter.BASIC_ISO_DATE);
                String useUploadPath = uploadFolder + "/" + today + "/";
                String picDir = rootPath + useUploadPath; // 文件绝对路径
                
                File createFile = new File(picDir);
                if (!createFile.exists()) {// 判断文件是否存在如果不存在则自动创建文件夹
                    createFile.mkdir();
                }
                String fileOldName = file.getOriginalFilename();
                // 上传的图片只允许是 png、jpg 或 gif 中的格式
                if (file.getOriginalFilename().contains(".png") || file.getOriginalFilename().contains(".jpg")
                || file.getOriginalFilename().contains(".gif")) {
                    String uuid = UUID.randomUUID().toString().replace("-", "");// 随机生成一个唯一性的id 文件不重名
                    String suffix = fileOldName.substring(fileOldName.lastIndexOf(".") + 1);
                    String newFilename = uuid + "." + suffix;
                    File f = new File(picDir + newFilename);
                    if (f.exists()) {// 上传的文件已经存在,则提示用户重新上传 apk 或者重命名
                        // list.add("上传的文件已经存在,则提示用户重新上传 apk 或者重命名");
                        setErrorNumber(getErrorNumber() + 1);
                        return list;
                    } else {
                        file.transferTo(f); // 将上传的文件写入到系统中
                        list.add(useUploadPath + newFilename);
                    }
                }
            } catch (Exception e) {
                setErrorNumber(getErrorNumber() + 1);
                e.printStackTrace();
            }
        }
        return list;
    }

    public int getErrorNumber() {
        return this.errorNumber;
    }

    public void setErrorNumber(int errorNumber) {
        this.errorNumber = errorNumber;
    }

}
