package com.erp.dataimport.service;

import com.erp.dataimport.dto.*;
import com.erp.dataimport.entity.ImportTemplate;
import org.springframework.web.multipart.MultipartFile;

import java.io.OutputStream;
import java.util.List;
import java.util.concurrent.CompletableFuture;

/**
 * 数据导入服务接口
 */
public interface DataImportService {

    /**
     * 上传并导入文件（Excel/CSV）
     */
    CompletableFuture<ImportResultResponse> importFile(MultipartFile file, ImportFileRequest request);

    /**
     * 同步导入文件
     */
    ImportResultResponse importFileSync(MultipartFile file, ImportFileRequest request);

    /**
     * 获取导入任务列表
     */
    ImportTaskPageResponse listImportTasks(ImportTaskListRequest request);

    /**
     * 获取导入任务详情
     */
    ImportTaskDTO getImportTask(Long taskId, Long tenantId);

    /**
     * 获取导入结果
     */
    ImportResultResponse getImportResult(Long taskId, Long tenantId);

    /**
     * 获取导入失败记录
     */
    ImportRecordPageResponse listImportFailRecords(ImportRecordListRequest request);

    /**
     * 下载导入错误报告
     */
    void downloadErrorReport(Long taskId, Long tenantId, OutputStream outputStream);

    /**
     * 删除导入任务
     */
    void deleteImportTask(Long taskId, Long tenantId);

    /**
     * 生成导入模板
     */
    void generateTemplate(String bizType, Long tenantId, OutputStream outputStream);

    /**
     * 创建自定义模板
     */
    ImportTemplateDTO createTemplate(CreateTemplateRequest request);

    /**
     * 获取模板列表
     */
    List<ImportTemplateDTO> listTemplates(String bizType, Long tenantId);

    /**
     * 删除模板
     */
    void deleteTemplate(Long templateId, Long tenantId);

    /**
     * 导出数据为CSV
     */
    void exportToCsv(String bizType, List<String> columns, List<List<Object>> data, OutputStream outputStream);

    /**
     * 导出数据为Excel
     */
    void exportToExcel(String bizType, List<String> headers, List<List<Object>> data, OutputStream outputStream);

    /**
     * 获取支持的业务类型
     */
    List<String> getSupportedBizTypes();
}
