using BlacksmithWorkshopContracts.BindingModels;
using BlacksmithWorkshopContracts.ViewModels;
using BlacksmithWorkshopDataModels.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;

namespace BlacksmithWorkshopFileImplement.Models
{
    public class MessageInfo : IMessageInfoModel
    {
        public string MessageId { get; private set; } = string.Empty;
        public int? ClientId { get; private set; }
        public string SenderName { get; private set; } = string.Empty;
        public DateTime DateDelivery { get; private set; } = DateTime.Now;
        public string Subject { get; private set; } = string.Empty;
        public string Body { get; private set; } = string.Empty;
		public bool IsReaded { get; private set; }
		public bool IsReply { get; private set; }
		public string? ReplyMessageId { get; private set; } = string.Empty;
		public static MessageInfo? Create(MessageInfoBindingModel model)
        {
            if (model == null)
            {
                return null;
            }
            return new()
            {
                Body = model.Body,
                Subject = model.Subject,
                ClientId = model.ClientId,
                MessageId = model.MessageId,
                SenderName = model.SenderName,
                DateDelivery = model.DateDelivery,
				IsReply = model.IsReply,
				IsReaded = model.IsReaded,
				ReplyMessageId = model.ReplyMessageId,
			};
        }
        public static MessageInfo? Create(XElement element)
        {
            if (element == null)
            {
                return null;
            }
            return new()
            {
                Body = element.Attribute("Body")!.Value,
                Subject = element.Attribute("Subject")!.Value,
                ClientId = Convert.ToInt32(element.Attribute("ClientId")!.Value),
                MessageId = element.Attribute("MessageId")!.Value,
                SenderName = element.Attribute("SenderName")!.Value,
                DateDelivery = Convert.ToDateTime(element.Attribute("DateDelivery")!.Value),
				IsReply = Convert.ToBoolean(element.Attribute("IsReply")!.Value),
				IsReaded = Convert.ToBoolean(element.Attribute("HasRead")!.Value),
				ReplyMessageId = element.Attribute("ReplyMessageId")!.Value,
			};
        }
		public void Update(MessageInfoBindingModel model)
		{
			if (model == null)
			{
				return;
			}
			IsReply = model.IsReply;
			IsReaded = model.IsReaded;
		}
		public MessageInfoViewModel GetViewModel => new()
        {
            Body = Body,
            Subject = Subject,
            ClientId = ClientId,
            MessageId = MessageId,
            SenderName = SenderName,
            DateDelivery = DateDelivery,
			IsReply = IsReply,
			IsReaded = IsReaded,
			ReplyMessageId = ReplyMessageId,
		};
        public XElement GetXElement => new("MessageInfo",
            new XAttribute("Body", Body),
            new XAttribute("Subject", Subject),
            new XAttribute("ClientId", ClientId ?? 0),
            new XAttribute("MessageId", MessageId),
            new XAttribute("SenderName", SenderName),
            new XAttribute("DateDelivery", DateDelivery),
			new XAttribute("IsReply", IsReply),
			new XAttribute("IsReaded", IsReaded),
			new XAttribute("ReplyMessageId", ReplyMessageId ?? "")
			);
    }
}
