using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using VetClinicBusinessLogic.OfficePackage.HelperEnums;
using VetClinicBusinessLogic.OfficePackage.HelperModels;

namespace VetClinicBusinessLogic.OfficePackage
{
	public abstract class AbstractSaveToExcelPharmacist
	{
		public void CreateReport(ExcelInfoPharmacist info)
		{
			CreateExcel(info);

			InsertCellInWorksheet(new ExcelCellParameters
			{
				ColumnName = "A",
				RowIndex = 1,
				Text = info.Title,
				StyleInfo = ExcelStyleInfoType.Title
			});

			MergeCells(new ExcelMergeParameters
			{
				CellFromName = "A1",
				CellToName = "C1"
			});

			uint rowIndex = 2;

			foreach (var rec in info.ServicesAnimals)
			{
				InsertCellInWorksheet(new ExcelCellParameters
				{
					ColumnName = "A",
					RowIndex = rowIndex,
					Text = rec.ServiceName,
					StyleInfo = ExcelStyleInfoType.Text
				});

				rowIndex++;

				foreach (var animal in rec.Animals)
				{
					InsertCellInWorksheet(new ExcelCellParameters
					{
						ColumnName = "B",
						RowIndex = rowIndex,
						Text = animal.AnimalName,
						StyleInfo = ExcelStyleInfoType.TextWithBroder
					});

					rowIndex++;
				}

				rowIndex++;
			}

			SaveExcel(info);
		}

		protected abstract void CreateExcel(ExcelInfoPharmacist info);

		protected abstract void InsertCellInWorksheet(ExcelCellParameters excelParams);

		protected abstract void MergeCells(ExcelMergeParameters excelParams);

		protected abstract void SaveExcel(ExcelInfoPharmacist info);
	}
}
