using LibraryDataModels.AbstractModels;
using LibraryDataModels.Views;
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 LibraryDatabase.Models
{
	[Table("authors")]
	public class Author : IAuthor
	{
		[Column("author_id")]
		public int Id { get; private set; }
		[Required]
		[Column("author_name")]
		public string Name { get; private set; } = string.Empty;
		public Author() {}
		public Author(IAuthor author)
		{
			Id = author.Id;
			Name = author.Name;
		}
		public static Author Create(IAuthor author)
		{
			if (author == null) 
				throw new ArgumentNullException("Cannot create author because model is null");
			return new Author(author);
		} 
		public void Update(IAuthor author)
		{
			if (string.IsNullOrWhiteSpace(author?.Name))
				throw new ArgumentNullException("Cannot update author because model is null");
			Name = author.Name;
		}
		public AuthorView GetView => new AuthorView(this);
	}
}