using Contracts.BindingModels;
using Contracts.ViewModels;
using DataModels.Models;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DatabaseImplement.Models
{
	public class MediaFile : IMediaFile
	{
		[Required]
		public Guid Id { get; set; }
		[Required]
		public string Name { get; set; } = string.Empty;
		[Required]
		public string Location { get; set; } = string.Empty;
		[Required]
		public Guid ProductId { get; set; }

		public MediaFileBindingModel GetBindingModel()
		{
			return new MediaFileBindingModel
			{
				Id = Id,
				Name = Name,
				Location = Location,
				ProductId = ProductId
			};
		}

		public static MediaFile ToMediaFileFromView(MediaFileViewModel model, MediaFile mediaFile)
		{
			return new MediaFile
			{
				Id = model.Id,
				Name = model.Name,
				Location = model.Location,
				ProductId = model.ProductId
			};
		}

		public static MediaFile ToMediaFileFromBinding(MediaFileBindingModel model, MediaFile mediaFile)
		{
			return new MediaFile
			{
				Id = model.Id,
				Name = model.Name,
				Location = model.Location,
				ProductId = model.ProductId
			};
		}

		public void Update(MediaFileBindingModel model)
		{
			if (model == null)
			{
				throw new ArgumentNullException(nameof(model));
			}

			// Обновление свойств на основе модели привязки
			Name = model.Name;
			Location = model.Location;
			ProductId = model.ProductId;
		}
	}
}