using MailKit.Net.Smtp;
using MimeKit;
using System;
using System.Linq;
using System.Linq.Dynamic.Core;
using UnivateProperties_API.Context;
using UnivateProperties_API.Model.Communication;
namespace UnivateProperties_API.Repository.Communication
{
    public interface IMailRepository
    {
        void ContactUs(MailModel mm);
        void EnquireNow(MailModel mm);
    }
    public class MailRepository : IMailRepository
    {
        private readonly DataContext _dbContext;
        public MailRepository(DataContext db)
        {
            _dbContext = db;
        }
        public MailRepository()
        {
        }
        MimeMessage messageObj = new MimeMessage();
        MailboxAddress from;
        MailboxAddress to;
        BodyBuilder bodyBuilder = new BodyBuilder();
        SmtpClient client = new SmtpClient();
        public void ContactUs(MailModel mm)
        {
            string property = mm.Property;
            string phone = mm.Phone;
            string name = mm.Name;
            string email = mm.Email;
            string message = mm.Message;
            from = new MailboxAddress("Admin", mm.FromAddress);
            to = new MailboxAddress("User", mm.ToAddress);
            messageObj.From.Add(from);
            messageObj.To.Add(to);
            messageObj.Subject = "Uni-Vate - New Contact Request";
            bodyBuilder.HtmlBody = "
" +
                "
Contact from: "+  name +"!
" +
                "
Email: "+ email +"
" +
                "
Phone: " + phone + "
" +
                "
Property: " + property + "
" +
                "
" +
                "
Message: 
" +
                "
" + message + "
" +
                "
" +
                "
 " +
                "";
            messageObj.Body = bodyBuilder.ToMessageBody();
            client.Connect("smtp.gmail.com", 465, true);
            client.Authenticate("jlouw365@gmail.com", "setskohatxpsceqo");
            client.Send(messageObj);
            client.Disconnect(true);
            client.Dispose();
        }
        public void EnquireNow(MailModel mm)
        {
            string phone = mm.Phone;
            string name = mm.Name;
            string email = mm.Email;
            string message = mm.Message;
            var props = _dbContext.Properties.ToList();
            var prop = props.Where(x => x.Id == Convert.ToInt32(mm.Property)).FirstOrDefault();
            
            from = new MailboxAddress("Admin", mm.FromAddress);
            to = new MailboxAddress("User", mm.ToAddress);
            messageObj.From.Add(from);
            messageObj.To.Add(to);
            messageObj.Subject = "Uni-Vate - Enquiry to view property";
            bodyBuilder.HtmlBody = "" +
                "
Contact from: " + name + "!
" +
                "
Email: " + email + "
" +
                "
Phone: " + phone + "
" +
                "
" +
                "
Property: 
" +
                "
" + prop.Id + "
" +
                "
" + prop.PropertyName + "
" +
                "
" + prop.PropertyRef + "
" +
                "
" + prop.Price + "
" +
                "
" +
                "
 " +
                "";
            messageObj.Body = bodyBuilder.ToMessageBody();
            client.Connect("smtp.gmail.com", 465, true);
            client.Authenticate("jlouw365@gmail.com", "setskohatxpsceqo");
            client.Send(messageObj);
            client.Disconnect(true);
            client.Dispose();
        }
        public void ForgotPassword(MailModel mm, string link)
        {
            string name = mm.Name;
            string email = mm.Email;
            from = new MailboxAddress("Admin", mm.FromAddress);
            to = new MailboxAddress("User", mm.ToAddress);
            messageObj.From.Add(from);
            messageObj.To.Add(to);
            messageObj.Subject = "Uni-Vate - Password Reset Request";
            bodyBuilder.HtmlBody = "" +
                "
Request to reset password
" +
                "
Dear " + name + " there has been a request  to reset your password. If this is incorrect please send an email to info@univateproperties.co.za
" +
                "
" +
                "
"+ link + "
" +
                "" +
                "
 " +
                "";
            messageObj.Body = bodyBuilder.ToMessageBody();
            client.Connect("smtp.gmail.com", 465, true);
            client.Authenticate("jlouw365@gmail.com", "setskohatxpsceqo");
            client.Send(messageObj);
            client.Disconnect(true);
            client.Dispose();
        }
    }
}