using AsbCloudApp.Data;
using AsbCloudApp.Exceptions;
using Microsoft.Extensions.Configuration;
using System;
using System.IO;

namespace AsbCloudInfrastructure.Services.Email
{

    public class BaseFactory
    {
        private readonly string platformName;
        private readonly string platformUrl;
        private readonly string companyName;
        private readonly string supportMail;

        public BaseFactory(IConfiguration configuration)
        {
            platformName = configuration.GetValue("email:platformName", "Цифровое бурение");
            platformUrl = configuration.GetValue("email:platformUrl", "https://cloud.digitaldrilling.ru/");
            companyName = configuration.GetValue("email:companyName", "ООО \"Цифровое бурение\"");
            supportMail = configuration.GetValue("email:supportMail", "support@digitaldrilling.ru");
        }

        public static string GetOrEmptyImageBase64(string resourceFileName)
        {
            if (string.IsNullOrEmpty(resourceFileName))
                throw new ArgumentInvalidException("ResourceFileName doesn`t exist", nameof(resourceFileName));

            var baseDir = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location)
            ?? string.Empty;
            var resourcesDir = "Res";

            var logoFilePath = Path.Combine(baseDir, resourcesDir, resourceFileName);

            if (!File.Exists(logoFilePath))
            {
                System.Diagnostics.Trace.TraceWarning($"GetOrEmptyImageBase64(). File {logoFilePath} not found.");
                return string.Empty;
            }                

            var imageBytes = File.ReadAllBytes(logoFilePath);
            var format = Path.GetExtension(resourceFileName).Trim('.');
            return "data:image/" + format + ";base64," + Convert.ToBase64String(imageBytes);
        }

        public static string MakeHref(string url, string text)
            => $"<a href=\"{url}\">{text}</a>";

        public string MakeSignatue()
        {
            var logo = GetOrEmptyImageBase64("logo_32.png");
            var sign = $"<br><br>---<br><img src=\"{logo}\"/><br>" +
            $"{companyName}<br>" +
            $"Это письмо сформировано автоматически.<br>" +
            $"Для получения помощи по работе на портале {platformName}" +
            $"обращайтесь по адресу {supportMail}";
            return sign;
        }

        public virtual string MakeSubject(WellDto well, string action)
            => $"{well.Deposit}, {well.Cluster}, {well.Caption}. {action}";
    }

}