package com.infynova.udi.service.helper;

import com.alibaba.excel.EasyExcel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.Collections;
import java.util.List;

/**
 * @author liudong
 * 2023/11/6 19:09
 * @version 1.0
 */
@Slf4j
@Component("udiEasyExcelHelper")
public class UdiEasyExcelHelper {

    public static <T> void exportTemplate(String name, Class<T> entity) throws IOException {
        List<T> list = Collections.emptyList();
        export(name, list, entity);
    }

    public static <T> void export(String name, List<T> list, Class<T> entity) throws IOException {
        String sheetName = name;
        export(name, sheetName, list, entity);
    }
    public static <T> void export(String name, String sheetName, List<T> list, Class<T> entity) throws IOException {
        HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
        export(response,name,sheetName,list,entity);
    }

    public static <T> void export(HttpServletResponse response,String name,String sheetName, List<T> list, Class<T> entity) throws IOException {
        log.info("导出excel~");
        // 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setCharacterEncoding("utf-8");
        // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
        String fileName = URLEncoder.encode(name, "UTF-8").replaceAll("\\+", "%20");
        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");

        EasyExcel.write(response.getOutputStream(), entity)
                .sheet(sheetName)
                .doWrite(list);
    }
}