using BankYouBankruptBusinessLogic.OfficePackage;
using BankYouBankruptBusinessLogic.OfficePackage.HelperModels;
using BankYouBankruptContracts.BindingModels;
using BankYouBankruptContracts.BusinessLogicsContracts;
using BankYouBankruptContracts.SearchModels;
using BankYouBankruptContracts.StoragesContracts;
using BankYouBankruptContracts.ViewModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BankYouBankruptBusinessLogic.BusinessLogics
{
	public class ReportCashierLogic : IReportCashierLogic
	{
		private readonly IMoneyTransferStorage _moneyTransferStorage;

		private readonly ICashWithdrawalStorage _cashWithdrawalStorage;

		private readonly IAccountStorage _accountStorage;

		private readonly AbstractSaveToExcelCashier _saveToExcel;

		private readonly AbstractSaveToWordCashier _saveToWord;

		private readonly AbstractSaveToPdfCashier _saveToPdf;

		//инициализируем поля класса через контейнер
		public ReportCashierLogic(IMoneyTransferStorage moneyTransferStorage, ICashWithdrawalStorage cashWithdrawalStorage,
			IAccountStorage accountStorage, AbstractSaveToExcelCashier saveToExcel, AbstractSaveToWordCashier saveToWord,
			AbstractSaveToPdfCashier saveToPdf)
		{
			_moneyTransferStorage = moneyTransferStorage;
			_cashWithdrawalStorage = cashWithdrawalStorage;
			_accountStorage = accountStorage;

			_saveToExcel = saveToExcel;
			_saveToWord = saveToWord;
			_saveToPdf = saveToPdf;
		}

		public List<ReportCashierViewModel>? GetMoneyTransfers(ReportBindingModel model)
		{
			return _moneyTransferStorage.GetFilteredList(new MoneyTransferSearchModel { DateFrom = model.DateFrom, DateTo = model.DateTo})
				.Select(x => new ReportCashierViewModel
				{
					DateComplite = x.DateOperation,
					AccountPayeeId = x.AccountPayeeId,
					AccountSenderId = x.AccountSenderId,
					SumOperation = x.Sum
				})
				.ToList();
		}

		public List<ReportCashierViewModel>? GetCashWithrawals(ReportBindingModel model)
		{
			return _cashWithdrawalStorage.GetFilteredList(new CashWithdrawalSearchModel { DateFrom = model.DateFrom, DateTo = model.DateTo })
				.Select(x => new ReportCashierViewModel
				{
					AccountPayeeId = x.Id,
					DateComplite = x.DateOperation,
					SumOperation = x.Sum
				})
				.ToList();
		}

		//Сохранение мороженных в файл-Word
		public void SaveAccountsToWordFile(ReportBindingModel model)
		{
			throw new NotImplementedException();
		}

		//Сохранение заготовок с указаеним изделий в файл-Excel
		public void SaveAccountsToExcelFile(ReportBindingModel model)
		{
			throw new NotImplementedException();
		}

		//Сохранение заказов в файл-Pdf
		public void SaveAccountsToPdfFile(ReportBindingModel model)
		{
			throw new NotImplementedException();
		}
	}
}