using ComputersShopContracts.BindingModels;
using ComputersShopContracts.ViewModels;
using ComputersShopDataModels.Enums;
using ComputersShopDataModels.Models;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;

namespace ComputersShopListImplement.Models
{
	public class Order : IOrderModel
	{
		public int Id { get; private set; }

		public int ComputerId { get; private set; }

		public int ClientId { get; private set; }

        public int? ImplementerId { get; private set; }

        public int Count { get; private set; }

		public double Sum { get; private set; }

		public OrderStatus Status { get; set; } = OrderStatus.Неизвестен;

		public DateTime DateCreate { get; set; } = DateTime.Now;

		public DateTime? DateImplement { get; set; }

		public static Order? Create(OrderBindingModel? model)
		{
			if (model == null)
			{
				return null;
			}
			return new Order()
			{
				Id = model.Id,
				ComputerId = model.ComputerId,
				ClientId = model.ClientId,
                ImplementerId = model.ImplementerId,
                Count = model.Count,
				Sum = model.Sum,
				Status = model.Status,
				DateCreate = model.DateCreate,
				DateImplement = model.DateImplement
			};
		}

		public void Update(OrderBindingModel? model)
		{
			if (model == null)
			{
				return;
			}
			Status = model.Status;
			DateImplement = model.DateImplement;
			ImplementerId = model.ImplementerId;
		}
		public OrderViewModel GetViewModel => new()
		{
			Id = Id,
			ComputerId = ComputerId,
			ClientId = ClientId,
            ImplementerId = ImplementerId,
            Count = Count,
			Sum = Sum,
			Status = Status,
			DateCreate = DateCreate,
			DateImplement = DateImplement
		};
	}
}
