//-----------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation.  All rights reserved.
//-----------------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.Serialization;

namespace System.IdentityModel.Tokens
{
    [DataContract]
    public class SamlNameIdentifierClaimResource
    {
        [DataMember]
        string nameQualifier;

        [DataMember]
        string format;

        [DataMember]
        string name;

        [OnDeserialized]
        void OnDeserialized(StreamingContext ctx)
        {
            if (string.IsNullOrEmpty(this.name))
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgument("name");
        }

        public SamlNameIdentifierClaimResource(string name, string nameQualifier, string format)
        {
            if (string.IsNullOrEmpty(name))
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgument("name");

            this.name = name;
            this.nameQualifier = nameQualifier;
            this.format = format;
        }

        public string NameQualifier
        { 
            get 
            { 
                return this.nameQualifier; 
            } 
        }

        public string Format
        { 
            get 
            { 
                return this.format; 
            } 
        }

        public string Name
        { 
            get 
            { 
                return this.name;
            } 
        }

        public override bool Equals(object obj)
        {
            if (obj == null)
                return false;

            if (ReferenceEquals(this, obj))
                return true;

            SamlNameIdentifierClaimResource rhs = obj as SamlNameIdentifierClaimResource;
            if (rhs == null)
                return false;

            return ((this.nameQualifier == rhs.nameQualifier) && (this.format == rhs.format) && (this.name == rhs.name));
        }

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

    }
}