using BlacksmithWorkshopBusinessLogic.OfficePackage;
using BlacksmithWorkshopBusinessLogic.OfficePackage.HelperModels;
using BlacksmithWorkshopBusinessLogic.OfficePackage.Implements;
using CarServiceContracts.BindingModels;
using CarServiceContracts.BusinessLogicsContracts;
using CarServiceContracts.StorageContracts;
using CarServiceContracts.ViewModels;
using Microsoft.Extensions.Logging;

namespace CarServiceBusinessLogic.BusinessLogics
{
	public class ReportLogic : IReportLogic
	{
		private readonly ILogger _logger;
		private readonly IWorkStorage _workStorage;
		private readonly IWorkPaymentStorage _workPaymentStorage;
		private readonly AbstractSaveToWord _saveToWord;
		private readonly AbstractSaveToExcel _saveToExcel;

		public ReportLogic(ILogger<ReportLogic> logger, IWorkStorage workStorage, IWorkPaymentStorage workPaymentStorage, AbstractSaveToWord saveToWord, AbstractSaveToExcel saveToExcel)
		{
			_logger = logger;
			_workStorage = workStorage;
			_workPaymentStorage = workPaymentStorage;
			_saveToWord = saveToWord;
			_saveToExcel = saveToExcel;
		}
		public List<ReportWorkWithRequestsViewModel> GetRequestsByWorks(ReportBindingModel model)
		{
			_logger.LogInformation("Reading requests by works");
			return _workStorage.GetWorksWithRequest(new() { SelectedWorksIds = model.SelectedWorks });
		}
		public List<ReportWorksWithPaymentsViewModel> GetPayments(ReportBindingModel model)
		{
			_logger.LogInformation("Reading payments by works in requests");
			return _workPaymentStorage.GetPaymentsByWorks(new() { DateFrom = model.DateFrom, DateTo = model.DateTo });
		}
		public void SaveRequestsToWordFile(ReportBindingModel model)
		{
			_saveToWord.CreateDoc(new WordInfo
			{
				FileName = model.FileName,
				Title = "Список заявок",
				WorksWithRequests = GetRequestsByWorks(model)
			});
		}
		public void SaveRequestsToExcelFile(ReportBindingModel model)
		{
			_saveToExcel.CreateReport(new ExcelInfo
			{
				FileName = model.FileName,
				Title = "Список заявок",
				WorksWithRequests = GetRequestsByWorks(model)
			});
		}
		public void SaveOrdersToPdfFile(ReportBindingModel model)
		{
			throw new NotImplementedException();
		}
	}
}