package com.bankaudit.rest.process.service;

import java.util.List;
import java.util.Map;
 

import com.bankaudit.dto.DataTableResponse;
import com.bankaudit.dto.process.AuditObservationDto;
import com.bankaudit.dto.process.AuditObservationRiskDto;
import com.bankaudit.dto.process.NonCompliancePersistenceChecklistDto;
import com.bankaudit.process.model.AuditObservation;
import com.bankaudit.process.model.AuditObservationReportReviewCapture;
import com.bankaudit.process.model.AuditObservationRespondReviewCapture;
import com.bankaudit.process.model.AuditSchedule; 

public interface AuditObservationService {
	
	DataTableResponse  getAuditObservationList(int legalEntityCode,String planId,String auditId, String search,Integer orderColumn,
			String orderDirection, Integer page, Integer size, String userId);

	void createObservation(AuditObservationDto auditObservationDto);

	String updateObservation(AuditObservationDto auditObservationDto);
	
	List<AuditObservation> getObservationByObservationGroupId(String observationGroupId ,Integer legalEntityCode);
    
	AuditSchedule getObservationCounts(Integer legalEntityCode, String auditTypeCode, String planId,String auditId);

	//Integer uploadDocument(String maker,String role, CommonsMultipartFile[] files, String fileName) throws Exception;

	/*List<AuditDocumentDetails> getAuditDocumentDetails(Integer legalEntityCode, String auditTypeCode, String planId,
			String auditId, String observationId, String documentType);*/

	/*void uploadDocument( CommonsMultipartFile[] files)throws Exception;*/
	

	/*AuditDocumentDetails getAuditDocumentDetails(Integer id, Integer legalEntityCode, String auditTypeCode,
			String planId, String auditId, String observationId, String documentType);*/

	AuditObservation getAuditObservation(Integer legalEntityCode, String auditTypeCode, String planId, String auditId,
			String groupObservationId, String observationId);
	
	List<AuditObservationRespondReviewCapture> getAuditObservationRespondReviewCaptureByObservation(Integer legalEntityCode, String auditTypeCode, String planId, String auditId,
			String groupObservationId, String observationId);

	Integer updateResponseObservation(AuditObservation auditObservation);
	
	Map<String, String> validateAccObsMapping(Integer legalEntityCode,String auditTypeCode,String planId,String auditId,String custId,String accountNo,String captureType,String mappingId,String type);  

	List<AuditObservation> getAllPossibleRisk(int legalEntityCode, String auditTypeCode, String auditId, String planId, String userId);
	
	void insertBulkObservationCapture(List<AuditObservation> auditObservationLst, int legalEntityCode, String auditTypeCode, String auditId, String planId);
	
	void insertBulkRiskCapture(List<AuditObservation> auditObservationLst);
	
	AuditObservation getRiskDtlsByRiskId(Integer legalEntityCode, String auditId, String observationId, String userId, String status );
	
	void updateRiskDetails(AuditObservationRiskDto auditObservationRiskDto);
	
	List<AuditObservation> getAllPossibleMapping(int legalEntityCode, String auditTypeCode, String auditId, String planId, String userId);
	
	AuditObservation getInspectionObservation(Integer legalEntityCode,String auditId, String auditTypeCode, String groupObservationId, String observationId);
	
	List<AuditObservationReportReviewCapture> getObservationReportReviewCaptureRemark(String legalEntityCode, String observationId );
	
	String updateIndividualObservation(AuditObservationDto auditObservationDto);
	
	AuditObservation updateObservationSpecificField(AuditObservation auditObservation, String fieldToUpdate);	
	
	//public  Map<String, Integer> uploadIndividualObservationDocument( AuditDocumentDetails auditDocumentDetails, CommonsMultipartFile[] files,String fileName);
	
	//public String deleteIndividualObservationDocument(Integer documentId);
	
	/*public String deleteAllObservationDocument(Integer legalEntityCode, String auditTypeCode,
			String planId, String auditId, String observationId, String documentType);*/
	
	List<AuditObservationReportReviewCapture> getObservationReportReviewCaptureNotes(Integer legalEntityCode, String observationId, String role);
	
	String submitObservationNotes(Integer legalEntityCode, String auditTypeCode,String auditId, String planId,  String role );
	
	List<AuditObservationRespondReviewCapture> getAuditObservationRespondReviewCapture(Integer legalEntityCode, 
			String auditTypeCode,String auditId, String planId, String observationId, String role);
	
	int getCountRespondRejectedRecords(Integer legalEntityCode, String auditId);
	
	String getNonComplianceBehavior(Integer legalEntityCode, String auditId, String auditTypeCode, String unitId, String observationId, String mappingId);  // Method to get Compliance behavior (Non compliance Persistence or not)
	
	String updatingOthersToNA(Integer legalEntityCode, String auditTypeCode,String auditId);
	
	List<NonCompliancePersistenceChecklistDto> getNonCompliancePersistenceChecklist(Integer legalEntityCode, String auditTypeCode, String auditId);
	
	void saveNonCompliancePersistenceRemarks(List<NonCompliancePersistenceChecklistDto> nonCompliancePersistenceChecklistDtoList);
}
