using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using AsbCloudApp.Data.ProcessMaps;
using AsbCloudApp.Repositories;
using AsbCloudInfrastructure.Services.ExcelServices.Templates;
using AsbCloudInfrastructure.Services.ExcelServices.Templates.ProcessMapPlanTemplates;

namespace AsbCloudInfrastructure.Services.ProcessMapPlan.Parser;

public class ProcessMapPlanOperationLoadCapacityParser : ProcessMapPlanParser<ProcessMapPlanOperationLoadCapacityDto>
{
	public ProcessMapPlanOperationLoadCapacityParser(IWellOperationRepository wellOperationRepository)
		: base(wellOperationRepository)
	{
	}

	protected override ITemplateParameters TemplateParameters => new ProcessMapPlanOperationLoadCapacityTemplate();

	protected override ProcessMapPlanOperationLoadCapacityDto BuildDto(IDictionary<string, object?> row, int rowNumber)
	{
		var dto = base.BuildDto(row, rowNumber);

		var section = sections.FirstOrDefault(s =>
			string.Equals(s.Caption.Trim(), dto.Section?.Trim(), StringComparison.CurrentCultureIgnoreCase));

		if (section is null)
		{
			var message = string.Format(XLExtentions.ProblemDetailsTemplate,
				TemplateParameters.SheetName,
				rowNumber,
				TemplateParameters.Cells[nameof(ProcessMapPlanBaseDto.Section)],
				"Указана некорректная секция");
			throw new FileFormatException(message);
		}

		dto.IdWellSectionType = section.Id;

		return dto;
	}
}