package com.bankaudit.rest.process.service;

import java.io.ByteArrayOutputStream;
import java.time.LocalDate;
import java.util.List;

import com.bankaudit.dto.DataTableResponse;
import com.bankaudit.dto.process.AuditRatingScoreDto;
import com.bankaudit.dto.process.AuditRatingSummaryDto;
import com.bankaudit.dto.process.RatingParameterReportDto;
import com.bankaudit.process.model.AuditRatingModelOverlay;
import com.bankaudit.process.model.AuditRatingParameterScore;

public interface AuditRatingParameterScoreService {

	DataTableResponse  getMuAuditsList(int legalEntityCode,String userId, String search,Integer orderColumn,
				String orderDirection, Integer page, Integer size, String role, String userLevel, LocalDate financialYear, String auditTypeCode);
	 
	DataTableResponse  getAuditsForView(int legalEntityCode,String userId, String unitCode, String roleId, String search,Integer orderColumn,
				String orderDirection, Integer page, Integer size);
	 
	DataTableResponse  getAuditsForLetter(int legalEntityCode,String userId, String search,Integer orderColumn,
				String orderDirection, Integer page, Integer size, String role);
	
	boolean verifyCSVUpload(int legalEntityCode,String auditId);
	
	List<AuditRatingParameterScore> insertAuditParameter(int legalEntityCode,String auditId, String unitId, String auditTypeCode, String userId);
	 
	List<AuditRatingParameterScore> getParametersByAuditId(int legalEntityCode,String auditId, String auditTypeCode, String userType); 
	 
	void updateAuditParamScores(List<AuditRatingParameterScore> auditRatingParameterScores, int legalEntityCode, String auditId, String userType);
	
	boolean executeAnUpdateWeightedScore(int legalEntityCode, String auditId, String userType);
		
	List<AuditRatingSummaryDto> getAuditRatingSummary(int legalEntityCode, String auditId, String rmCode, String userType); //Widget 1 Method
	
	List<AuditRatingSummaryDto> getAuditRatingSummaryWithOverlay(int legalEntityCode, String auditId, String rmCode, String userType); //Widget 3 Method
	
	boolean isModelOverlayApplied(int legalEntityCode,String auditId);
		
	List<AuditRatingModelOverlay> getModelOverlayByAuditId(int legalEntityCode, String auditId, String rmCode, String userId); //Widget 2 Method
		
	void updateAuditRatingModelOverlays(List<AuditRatingModelOverlay> auditRatingModelOverlays);
	
	void updateAuditRatingParameterCategoryScore(List<AuditRatingSummaryDto> auditRatingParameterCategoryLst, int legalEntityCode, String auditId, String auditTypeCode);
	
	AuditRatingScoreDto getAuditRatingScores(int legalEntityCode, String auditId, String rmCode,  String userType); //Widget 4 Method
	
	ByteArrayOutputStream downloadRatingParameterScoresByAuditId(Integer legalEntityCode, String auditId, String auditTypeCode, String role, String userType, String ratingParameterStatus);
	
	RatingParameterReportDto getRatingReportDataByAuditId(int legalEntityCode,String auditId, String auditTypeCode, String unitId, String rmCode, String userType);
	
	RatingParameterReportDto getRatingReportDataByAuditIdHORO(int legalEntityCode,String auditId, String auditTypeCode, String unitId, String rmCode, String userType);
		
	RatingParameterReportDto getRatingReportDataByAuditIdHOROExisting(int legalEntityCode,String auditId, String auditTypeCode, String unitId, String rmCode, String userType);
	
	// List getRatingAndObsCntGrpSGrpwiseByAuditId(int legalEntityCode,String auditTypeCode, String planId,String auditId); 
	
}
