package pwc.taxtech.atms.controller;

import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import pwc.taxtech.atms.common.message.ErrorMessage;
import pwc.taxtech.atms.dto.OperationResultDto;
import pwc.taxtech.atms.dto.input.CamelPagingResultDto;
import pwc.taxtech.atms.dto.reportFileUpload.ReportFileUploadParam;
import pwc.taxtech.atms.dto.reportFileUpload.ReportFileUploadResult;
import pwc.taxtech.atms.dto.reportUpload.ReportUploadParam;
import pwc.taxtech.atms.dto.reportUpload.ReportUploadResult;
import pwc.taxtech.atms.exception.ServiceException;
import pwc.taxtech.atms.service.impl.ReportFileUploadService;
import pwc.taxtech.atms.service.impl.ReportUploadService;
import pwc.taxtech.atms.vat.entity.ReportFileUpload;

import javax.annotation.Resource;
import java.util.List;

@RestController
@RequestMapping(value = "api/v1/reportUploadDetail")
public class ReportUploadDetailController extends BaseController {

    @Resource
    private ReportUploadService reportUploadService;


    @Resource
    private ReportFileUploadService reportFileUploadService;
    @PostMapping("queryPage")
    public CamelPagingResultDto<ReportUploadResult> queryPage(@RequestBody ReportUploadParam param) {
        return new CamelPagingResultDto<>(reportUploadService.queryPage(param));
    }


    @PostMapping("queryFileUpload")
    public List<ReportFileUploadResult> queryFileUpload(@RequestBody ReportFileUploadParam param) {
        return reportFileUploadService.queryData(param);
    }

    @ResponseBody
    @PostMapping("saveFileUpload")
    public OperationResultDto saveFileUpload(@RequestParam MultipartFile file, @RequestParam String sourceType,@RequestParam String reportType,@RequestParam String projectId, @RequestParam Integer period) {
        try {
            ReportFileUpload data = new ReportFileUpload();
            data.setPeriod(period);
            data.setProjectId(projectId);
            data.setReportType(reportType);
            data.setSourceType(sourceType);
            reportFileUploadService.saveData(file,data);
            return OperationResultDto.success();
        } catch (ServiceException e) {
            return OperationResultDto.error(e.getMessage());
        } catch (Exception e) {
            logger.error("upload file error.", e);
            return OperationResultDto.error(ErrorMessage.SystemError);
        }
    }
}