package com.bankaudit.rest.process.service;

import java.time.LocalDate;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.bankaudit.dto.DataTableResponse;
import com.bankaudit.dto.process.BranchPerformanceBUResponse;
import com.bankaudit.dto.process.BranchPerformanceResponseDto;
import com.bankaudit.dto.process.DashboardSummaryDto;
import com.bankaudit.dto.process.PlanCalendarResponseDto;
import com.bankaudit.dto.process.RatingVarianceGraphResponseDto;
import com.bankaudit.dto.process.RealTimeRectificationResponseDto;
import com.bankaudit.dto.process.ScheduleVarianceGraphResponseDto;
import com.bankaudit.dto.process.UnitBreakUpResponseDto;
import com.bankaudit.model.MaintUsergroupRoles;
import com.bankaudit.process.model.AuditSchedule;

public interface DashboardService {

	Map<String, HashMap<String, Long>> getAuditStatus(Integer legalEntityCode, String auditType, String unitType,
			String criticality, String period, LocalDate fromDate, LocalDate toDate, String userId, String role);

	DataTableResponse getAuditSchedules(int parseInt, String userId, String search, Integer orderColumn,
			String orderDirection, Integer page, Integer size, String role);

	Map<String, List<ScheduleVarianceGraphResponseDto>> getScheduleVariance(int parseInt, String auditType, String period,
			LocalDate fromDate, LocalDate toDate, String userId, String role, String unitType, String criticality);

	List<RealTimeRectificationResponseDto> getRealTimeRectification(int parseInt, String auditType,
			String period, LocalDate fromDate, LocalDate toDate, String userId, String role, String unitType, String criticality);

	List<RatingVarianceGraphResponseDto> getRatingStatus(int parseInt, String auditType, String period,
			LocalDate fromDate, LocalDate toDate, String userId, String role, String unitType, String criticality);

	List<Map<String, HashMap<String,Long>>> getRatingVariance(int parseInt, String auditType, String period,
			LocalDate fromDate, LocalDate toDate, String userId, String role, String unitType, String criticality);
	
	List<Map<String, List<Map<String,Long>>>> getRatingTrend(int parseInt, String auditType, String period,
			LocalDate fromDate, LocalDate toDate, String userId, String role, String unitType, String criticality);
	
	Map<String, HashMap<String, Long>> getMyAuditStatistics(Integer legalEntityCode, String auditType, String unitType,
			String criticality, String period, LocalDate fromDate, LocalDate toDate, String userId, String role);

	Map<String, BranchPerformanceResponseDto> getBranchPerformance(int parseInt, String auditType, String period,
			LocalDate fromDate, LocalDate toDate, String userId, String role, String unitType, String criticality);

	Map<String, List>  getBranchPerformanceForBU(int parseInt, String auditType, String userId, String role);

	List<UnitBreakUpResponseDto> getUnitBreakUp(int parseInt, String auditType, String unitType, String period, LocalDate fromDate,
			LocalDate toDate, String role, String userId,String criteria);
	 
	List<PlanCalendarResponseDto> getPlanCalendar(int parseInt);
	
	Map<String, String>  getResourcePlanningAuditorEffort(int parseInt, String auditType, String userId, String role, String unitType, String criticality);
	
	List<AuditSchedule> getAuditSummary(int parseInt, String auditType, String period,
			LocalDate fromDate, LocalDate toDate, String userId, String role, String unitType, String criticality);
	
	List<BranchPerformanceBUResponse> getBranchPerformanceRectification(int parseInt, String auditType, String period,
			LocalDate fromDate, LocalDate toDate, String userId, String role,  String criticality);
	
	Map<String, Integer>  getUserDtlsforAdminDB(int legalEntityCode,String userId,String role);
	
	List<MaintUsergroupRoles> getRolewiseUsersCount(int legalEntityCode,String userId,String role);
	
	Map<String, String>  getAssessmentSummaryDtls(int legalEntityCode,String userId,String unitId,String role, String auditTypeCode);
	
	Map<String, HashMap<String, Long>> getAuditClosureStatus(Integer legalEntityCode, String auditType, String unitType,
			String criticality, String period, LocalDate fromDate, LocalDate toDate, String userId, String role);
	
	List<List> getAuditClosureStatusTmp(Integer legalEntityCode, String auditType, String unitType,
			String criticality, String period, LocalDate fromDate, LocalDate toDate, String userId, String role);
	
	Map<String, String>  getAuditSummaryTrgtWtchlstTotal(int legalEntityCode,String userOrUnitCode,String type,String auditTypeCode);
	
	List< HashMap<String,String>> getRiskProfileDeptwise(int parseInt, String auditType, String period,
			LocalDate fromDate, LocalDate toDate, String userId, String role, String unitId);
	
	List< HashMap<String,String>> getRiskProfileProductwise(int parseInt, String auditType, String period,
			LocalDate fromDate, LocalDate toDate, String userId, String role, String unitId);
	
	List< HashMap<String,String>> getControlProfileDeptwise(int parseInt, String auditType, String period,
			LocalDate fromDate, LocalDate toDate, String userId, String role, String unitId);
	
	List< HashMap<String,String>> getControlProfileProductwise(int parseInt, String auditType, String period,
			LocalDate fromDate, LocalDate toDate, String userId, String role, String unitId);
	
	Map<String, Integer>  getTaskStatistics(int legalEntityCode,String userId,String role, String auditType, String unitId);

	Map<String, Integer>  getOverDueTaskStatistics(int legalEntityCode,String userId,String role, String auditType, String unitId);
	
	Map<String, String>  getHealthControlRiskSummaryDetails(int legalEntityCode,String userId,String role, String auditType, String unitId);
	
	Boolean isAssessmentProcessDoneFY(int legalEntityCode);
	
	/******************** New Dashboard implementation start ********************/
			
	/*Map<String, Integer> getDeskComplianceRatingWidget(Integer legalEntityCode, String userId, String role, LocalDate financialYear,  String auditTypeCode, 
			String zone, String unitId);
	
	Map<String, Integer> getSupervisoryRatingWidget(Integer legalEntityCode, String userId, String role, LocalDate financialYear,  String auditTypeCode, 
			String zone, String unitId);
	
	Map<String, Map<String, String>> getSupervisoryRatingMigrationWidget(Integer legalEntityCode, String userId, String role, LocalDate financialYear,  String auditTypeCode, 
			String zone, String unitId);
	
	Map<String, String> getBudgetProgressWidget(Integer legalEntityCode, String userId, String role, LocalDate financialYear,  String auditTypeCode, 
			String zone, String unitId);
	
	Map<String, String> getComplianceStatusWidget(Integer legalEntityCode, String userId, String role, LocalDate financialYear,  String auditTypeCode, 
			String zone, String unitId); */
	
	 Map<String, Object> getAllManagementWidget(Integer legalEntityCode, String userId, String role, LocalDate financialYear,  String auditTypeCode, 
				String zone, String unitId);
	 
	 Map<String, Object> getAllOperationalWidget(Integer legalEntityCode, String userId, String role, LocalDate financialYear,  String auditTypeCode, 
				String zone, String unitId);
	 
	 Map<String, Object> getAllInspectorWidget(Integer legalEntityCode, String userId, String role, LocalDate financialYear,  String auditTypeCode, 
				String zone, String unitId);
	 
	 Map<String, Object> getAllBankUserWidget(Integer legalEntityCode, String userId, String role, LocalDate financialYear,  String auditTypeCode, 
				String zone, String unitId);
	 
	 Map<String, Object> getScrutinyWidget(Integer legalEntityCode, String userId, String role, LocalDate financialYear,  String auditTypeCode, 
				String zone, String unitId);
	 
	 
	 Map<String,String> getAuditSummaryTrgtWtchlstTotalTopBand(Integer legalEntityCode,String userOrUnitCode,String type,
				String auditTypeCode, LocalDate financialYear);
	 
	 DataTableResponse getMyAuditSchedules(Integer legalEntityCode, String userId, String search, Integer orderColumn,
				String orderDirection, Integer page, Integer size,  String role);
}
