// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

using System;
using System.Collections.Generic;
using System.Linq;

namespace Microsoft.AspNetCore.Razor.Language
{
	public abstract class AllowedChildTagDescriptor : IEquatable<AllowedChildTagDescriptor>
	{
		public string Name { get; protected set; }

		public string DisplayName { get; protected set; }

		public IReadOnlyList<RazorDiagnostic> Diagnostics { get; protected set; }

		public bool HasErrors
		{
			get
			{
				var errors = Diagnostics.Any( diagnostic => diagnostic.Severity == RazorDiagnosticSeverity.Error );

				return errors;
			}
		}

		public override string ToString()
		{
			return DisplayName ?? base.ToString();
		}

		public bool Equals( AllowedChildTagDescriptor other )
		{
			return AllowedChildTagDescriptorComparer.Default.Equals( this, other );
		}

		public override bool Equals( object obj )
		{
			return Equals( obj as AllowedChildTagDescriptor );
		}

		public override int GetHashCode()
		{
			return AllowedChildTagDescriptorComparer.Default.GetHashCode( this );
		}
	}
}
