package org.qinan.safetyeval.client.api;

import org.qinan.safetyeval.client.co.QualFilingChangeAggregationCO;
import org.qinan.safetyeval.client.co.QualFilingChangeComplianceCheckResultCO;
import org.qinan.safetyeval.client.co.QualFilingChangeHistoryCO;
import org.qinan.safetyeval.client.co.QualFilingChangeCO;
import org.qinan.safetyeval.client.dto.AggregationSaveOrEditQualFilingChangeCmd;
import org.qinan.safetyeval.client.dto.PageResponse;
import org.qinan.safetyeval.client.dto.SingleResponse;
import org.qinan.safetyeval.client.dto.QualFilingChangeAddCmd;
import org.qinan.safetyeval.client.dto.QualFilingChangeModifyCmd;
import org.qinan.safetyeval.client.dto.QualFilingChangePageQuery;
import org.qinan.safetyeval.client.dto.QualFilingChangeReviewAddCmd;
import org.qinan.safetyeval.client.dto.QualFilingChangeSubmitCmd;
import org.qinan.safetyeval.client.dto.QualFilingRejectCmd;

import java.util.List;

/**
 * 备案变更接口定义（Client层）
 */
public interface QualFilingChangeApi {

    SingleResponse<QualFilingChangeCO> add(QualFilingChangeAddCmd cmd);

    SingleResponse<QualFilingChangeCO> get(Long id);

    SingleResponse<QualFilingChangeCO> modify(QualFilingChangeModifyCmd cmd);

    SingleResponse<Void> delete(Long id);

    PageResponse<QualFilingChangeCO> page(QualFilingChangePageQuery query);

    SingleResponse<Long> start(Long filingId);

    SingleResponse<Void> submit(QualFilingChangeSubmitCmd cmd);

    SingleResponse<QualFilingChangeHistoryCO> history(Long filingId);

    SingleResponse<Void> approve(Long changeId);

    SingleResponse<Void> reject(QualFilingRejectCmd cmd);

    SingleResponse<List<QualFilingChangeComplianceCheckResultCO>> complianceCheck(Long id);

    SingleResponse<QualFilingChangeCO> aggregationSaveOrEdit(AggregationSaveOrEditQualFilingChangeCmd cmd);

    void review(QualFilingChangeReviewAddCmd cmd);

    SingleResponse<QualFilingChangeAggregationCO> detail(Long id);
}
