using AsbCloudApp.Data;
using AsbCloudInfrastructure.Services.Email;
using Microsoft.Extensions.Configuration;
using System;
using System.IO;

namespace AsbCloudInfrastructure
{
    class DrillingMailBodyFactory : BaseFactory
    {
		private readonly string platformName;
        private readonly string platformUrl;

        public DrillingMailBodyFactory(IConfiguration configuration)
			: base(configuration)	
        {
			platformName = configuration.GetValue("email:platformName", "Цифровое бурение");
			platformUrl = configuration.GetValue("email:platformUrl", "https://cloud.digitaldrilling.ru/");
		}

		public override string MakeSubject(WellDto well, string action)
        {
			var subj = $"{well.Deposit}, {well.Cluster}, {well.Caption}. Программа бурения. {action}";
			return subj;
		}

		public string MakeMailBodyForNewPublisher(WellDto well, string publisherName, string documentCategory)
		{
			var drillingProgramHref = MakeDrillingProgramHref(well);

			var body = $"<html><body><h2>Здравствуйте, {publisherName}.</h2>" +
				$"На портале {platformName} началось создание программы бурения скважины {drillingProgramHref}," +
				$" куст {well.Cluster}, месторождение {well.Deposit}." +
				$"<br><br>От вас ожидается загрузка на портал документа «{documentCategory}» в формате excel (*.xlsx)." + 
				MakeSignatue() +
				$"</body></html>";
			return body;
		}

		public string MakeMailBodyForApproverNewFile(WellDto well, string approverName, int idFile, string fileName)
        {
			var drillingProgramHref = MakeDrillingProgramHref(well);

			var body = $"<html><body><h2>Здравствуйте, {approverName}.</h2>" +
                $"На портал {platformName} загружен документ {fileName}" +
				$" для согласования при создании программы бурения скважины {drillingProgramHref}, куст ({well.Cluster})" +
				$", месторождение ({well.Deposit}).<br>" +
                MakeSignatue() +
                $"</body></html>";
			return body;
		}

		public string MakeMailBodyForPublisherOnReject(WellDto well, string publisherName, int idFile, string fileName, FileMarkDto fileMark)
		{
			var drillingProgramHref = MakeDrillingProgramHref(well);

			var body = $"<html><body><h2>Здравствуйте, {publisherName}.</h2>" +
				$"На портале {platformName} отклонен загруженный вами документ {fileName} " +
                $" по программе бурения скважины {drillingProgramHref}," +
				$" куст {well.Cluster}, месторождение {well.Deposit}." +
				$" Комментарий согласующего ({fileMark.User?.Name} {fileMark.User?.Surname}):<br>{fileMark.Comment}" +
				MakeSignatue() +
				$"</body></html>";
			return body;
		}

		public string MakeMailBodyForPublisherOnFullAccept(WellDto well, string publisherName, int idFile, string fileName)
		{
			var drillingProgramHref = MakeDrillingProgramHref(well);

			var body = $"<html><body><h2>Здравствуйте, {publisherName}.</h2>" +
				$"На портале {platformName} полностью согласован документ {fileName} " +
				$" по программе бурения скважины {drillingProgramHref}," +
				$" куст {well.Cluster}, месторождение {well.Deposit}." +
				MakeSignatue() +
				$"</body></html>";
			return body;
		}

		private string MakeDrillingProgramHref(WellDto well)
        {
			var drillingProgramUrl = $"{platformUrl}/well/{well.Id}/drillingProgram";
			var drillingProgramHref = MakeHref(drillingProgramUrl, well.Caption);
			return drillingProgramHref;
		}
	}
}