namespace MyOffice.Web.Models.Item
{
	using System.ComponentModel.DataAnnotations;
	using MyOffice.Core.Extensions;
	using MyOffice.Data.Models.Items;
	using MyOffice.Migrations.Postgres.Migrations;

	public class ItemCategoryViewModel
	{
		public string? Id { get; set; }

		[Required] 
		public string Name { get; set; } = null!;

		public bool AllowDelete { get; set; }
		public int SortOrder { get; set; }
		public bool IsInternal { get; set; }
	}

	public static class ItemCategoryViewModelExtensions
	{
		public static ItemCategoryViewModel ToModel(this ItemCategory input)
		{
			return new ItemCategoryViewModel
			{
				Id = input.Id.ToShort(),
				Name = input.Name,
				AllowDelete = !input.Items.Any() && input.Id != input.UserId,
				IsInternal = input.IsInternal,
				SortOrder = input.Id == input.UserId ? 1 : 0
			};
		}

		public static ItemCategory FromModel(this ItemCategoryViewModel input)
		{
			if (input == null) 
				throw new ArgumentNullException(nameof(input));

			return new ItemCategory
			{
				Name = input.Name,
				IsInternal = input.IsInternal,
			};
		}
	}
}
