using ElectronicsShopContracts.BindingModels;
using ElectronicsShopContracts.ViewModels;
using ElectronicsShopDataModels.Enums;
using ElectronicsShopDataModels.Models;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ElectronicsShopDataBaseImplement.Models
{
    public class Product : IProductModel {
        public int ID { get; set; }

        [Required]
        public string ProductName { get; set; } = string.Empty;

        [Required]
        public double Price { get; set; }

        [ForeignKey("CostItemID")]
        public int CostItemID { get; set; }

        public virtual CostItem CostItem { get; set; } 

        public static Product? Create(ProductBindingModel? model)
        {
            if (model == null)
            {
                return null;
            }
            return new Product() {
                ID = model.ID,
                ProductName = model.ProductName,
                Price = model.Price,
                CostItemID = model.CostItemID,
            };
        }
        public void Update(ProductBindingModel? model)
        {
            if (model == null)
            {
                return;
            }
            ProductName = model.ProductName;
            Price = model.Price;
            CostItemID = model.CostItemID;
        }

        public ProductViewModel GetViewModel => new()
        {
            ID = ID,
            ProductName = ProductName,
            Price = Price,
            CostItemID = CostItemID,
            CostItemName = CostItem?.Name ?? string.Empty,
        };
    }
}