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

import com.njcn.rdms.framework.common.pojo.PageResult;
import com.njcn.rdms.module.project.controller.admin.workreport.project.vo.ProjectReportExportVO;
import com.njcn.rdms.module.project.controller.admin.workreport.project.vo.ProjectReportDefaultDraftReqVO;
import com.njcn.rdms.module.project.controller.admin.workreport.project.vo.ProjectReportOwnerProjectOptionRespVO;
import com.njcn.rdms.module.project.controller.admin.workreport.project.vo.ProjectReportPageReqVO;
import com.njcn.rdms.module.project.controller.admin.workreport.project.vo.ProjectReportRefreshDraftReqVO;
import com.njcn.rdms.module.project.controller.admin.workreport.project.vo.ProjectReportRespVO;
import com.njcn.rdms.module.project.controller.admin.workreport.project.vo.ProjectReportSaveReqVO;
import com.njcn.rdms.module.project.controller.admin.workreport.common.vo.WorkReportApprovalRecordRespVO;
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 ProjectReportService {

    List<ProjectReportOwnerProjectOptionRespVO> getOwnerProjectOptions();

    ProjectReportRespVO initProjectReport(Long projectId);

    ProjectReportRespVO previewProjectDefaultDraft(Long projectId, ProjectReportDefaultDraftReqVO reqVO);

    ProjectReportRespVO refreshProjectDraft(Long projectId, ProjectReportRefreshDraftReqVO reqVO);

    Long createProjectReport(ProjectReportSaveReqVO reqVO);

    void updateProjectReport(Long id, ProjectReportSaveReqVO reqVO);

    ProjectReportRespVO getProjectReport(Long id);

    PageResult<ProjectReportRespVO> getProjectReportPage(ProjectReportPageReqVO reqVO);

    PageResult<ProjectReportRespVO> getProjectApprovalPage(ProjectReportPageReqVO reqVO);

    void submitProjectReport(Long id);

    void approveProjectReport(Long id, WorkReportStatusActionReqVO reqVO);

    void rejectProjectReport(Long id, WorkReportStatusActionReqVO reqVO);

    void deleteProjectReport(Long id);

    List<WorkReportStatusLogRespVO> getProjectStatusLogs(Long id);

    List<WorkReportApprovalRecordRespVO> getProjectApprovalRecords(Long id);

    List<ProjectReportExportVO> getProjectExportList(ProjectReportPageReqVO reqVO);
}
