package incheon.com.excel.service;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.function.BiFunction;

/**
 * 공통 엑셀 다운로드 서비스
 */
public interface CommonExcelService {

    /** 엑셀 다운로드 최대 건수 (하드 리밋) */
    int XLSX_MAX_ROWS = 1000000;

    /**
     * 스트리밍 방식 엑셀 다운로드
     *
     * @param fileName     파일명 (확장자 제외)
     * @param columnMap    컬럼 매핑 (단순: "헤더명", 공통코드: {label: "헤더명", comGroupCd: "GRP_CD"})
     * @param response     HttpServletResponse
     * @param dataSupplier 페이지별 데이터 공급자 (pageNo, pageSize) -> List
     * @param pageSize     페이지당 조회 건수
     * @param maxRows      최대 행 수
     * @return 실제 출력된 행 수
     */
    int exportStream(String fileName, Map<String, Object> columnMap, HttpServletResponse response,
                     BiFunction<Integer, Integer, List<Map<String, Object>>> dataSupplier,
                     int pageSize, int maxRows) throws IOException;
}
