using System;
using System.Collections.Generic;
using BeWo.Report.DefaultReports;
using BS.Shared;
using BS.Shared.Core;
using DevExpress.XtraReports.UI;

namespace BeWo.Report
{
	public abstract class AbstractReportCreator
	{
		public String Tenant { get; set; }

		public string ReportPath { get; set; }

		public string TempPath { get; set; }

		public abstract XtraReport CreateCustomerDataReport(long customerOid);

		public abstract XtraReport CreateCustomerInvoiceReport(long invoiceOid);

		public abstract XtraReport CreateAssessmentSheetReport(long customerOid, int month, int year);

		public abstract XtraReport CreateFlsReport(String flsReportId, String subType);

		public abstract XtraReport CreateQueryReport(long queryOid, String queryReportId);

		public abstract XtraReport CreateServiceInvoiceReport(String dcIds, long? invoiceBaseOid);

		public abstract XtraReport CreateServiceOverviewAllCustomersReport(int month, int year, long orgaOid, long empOid,
		                                                                   long? serviceCategoryOid,
		                                                                   int startDay, int endDay);

		public abstract XtraReport CreateServiceOverviewSingleCustomerReport(long customerOid, int month, int year,
		                                                                     long orgaOid, long empOid,
		                                                                     long? serviceCategoryOid, int startDay,
		                                                                     int endDay);

		public abstract XtraReport CreateServiceRecordListReport(long employeeOid, long customerOid, long supportConceptOid,
		                                                         long costbearer2SupportConceptOid, bool isLimitedToAdditionalServices, 
																 DateTimeSpan limitingTimeSpan);

		public abstract XtraReport CreateSettlementReport(String dcId, long? invoiceBaseOid);

		public abstract XtraReport CreateSupportConceptReport(long employeeOid, bool onlyMySupportConcepts,
		                                                      bool archivedSupportConcepts, DateTime? appointedDate);


		public abstract XtraReport CreateAdditionalServiceBookingReport(long addServiceRegionOid, Monat month, int year);

		public abstract XtraReport CreateEmployeeHourReport(long? employeeOid, long? teamOid, DateTime startDate, DateTime endDate, bool splitTeams);

		public abstract XtraReport CreateAuslastungReport(long? employeeOid, long? teamOid, DateTime startDate, DateTime endDate, bool splitTeams);

		public abstract XtraReport CreateMediVerordListenReport(long? mvlOid);

		public abstract XtraReport CreateMediVerordListenMZfReport(long? mvlOid, bool mitZusatzfeldern);

		public abstract XtraReport CreateKalenderReport(long? employeeOid, AppointmentViewType viewType, DateTime rangeStartDate, DateTime rangeEndDate, List<DateTime> datesList, List<UserRightType> userRights);

		public abstract XtraReport CreateFinanceReport(DateTime? start, DateTime? end);

        public abstract XtraReport CreateJahresberichtReport(int year, long? cbOid, long? teamOid, long? betreuungsartOid);
	}
}