package com.njcn.rdms.module.project.service.workreport.monthly;

import com.njcn.rdms.framework.common.pojo.PageResult;
import com.njcn.rdms.module.project.controller.admin.workreport.monthly.vo.MonthlyReportApprovalRecordRespVO;
import com.njcn.rdms.module.project.controller.admin.workreport.monthly.vo.MonthlyReportApproveReqVO;
import com.njcn.rdms.module.project.controller.admin.workreport.monthly.vo.MonthlyReportDefaultDraftReqVO;
import com.njcn.rdms.module.project.controller.admin.workreport.monthly.vo.MonthlyReportExportVO;
import com.njcn.rdms.module.project.controller.admin.workreport.monthly.vo.MonthlyReportPageReqVO;
import com.njcn.rdms.module.project.controller.admin.workreport.monthly.vo.MonthlyReportRefreshDraftReqVO;
import com.njcn.rdms.module.project.controller.admin.workreport.monthly.vo.MonthlyReportRespVO;
import com.njcn.rdms.module.project.controller.admin.workreport.monthly.vo.MonthlyReportSaveReqVO;
import com.njcn.rdms.module.project.controller.admin.workreport.monthly.vo.MonthlyReportSignOffConfirmReqVO;
import com.njcn.rdms.module.project.controller.admin.workreport.monthly.vo.MonthlyReportSignOffDetailRespVO;
import com.njcn.rdms.module.project.controller.admin.workreport.common.vo.WorkReportStatusActionReqVO;
import com.njcn.rdms.module.project.controller.admin.workreport.common.vo.WorkReportStatusLogRespVO;

import java.util.List;

public interface MonthlyReportService {

    MonthlyReportRespVO initMonthlyReport();

    MonthlyReportRespVO previewMonthlyDefaultDraft(MonthlyReportDefaultDraftReqVO reqVO);

    MonthlyReportRespVO refreshMonthlyDraft(MonthlyReportRefreshDraftReqVO reqVO);

    Long createMonthlyReport(MonthlyReportSaveReqVO reqVO);

    void updateMonthlyReport(Long id, MonthlyReportSaveReqVO reqVO);

    MonthlyReportRespVO getMonthlyReport(Long id);

    PageResult<MonthlyReportRespVO> getMonthlyReportPage(MonthlyReportPageReqVO reqVO);

    PageResult<MonthlyReportRespVO> getMonthlyApprovalPage(MonthlyReportPageReqVO reqVO);

    PageResult<MonthlyReportRespVO> getMonthlySignOffPage(MonthlyReportPageReqVO reqVO);

    MonthlyReportSignOffDetailRespVO getMonthlySignOffDetail(Long id);

    void submitMonthlyReport(Long id);

    void approveMonthlyReport(Long id, MonthlyReportApproveReqVO reqVO);

    void rejectMonthlyReport(Long id, WorkReportStatusActionReqVO reqVO);

    void confirmMonthlySignOff(Long id, MonthlyReportSignOffConfirmReqVO reqVO);

    void deleteMonthlyReport(Long id);

    List<WorkReportStatusLogRespVO> getMonthlyStatusLogs(Long id);

    List<MonthlyReportApprovalRecordRespVO> getMonthlyApprovalRecords(Long id);

    List<MonthlyReportExportVO> getMonthlyExportList(MonthlyReportPageReqVO reqVO);
}
