using System;
using System.Runtime.CompilerServices;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections.ObjectModel;
using System.Diagnostics;
namespace BowlingLib.Model
{
///
/// Classe Model Joueur
///
public class Joueur : IEquatable
{
#region Propriétés
private string pseudo;
private readonly long id;
private readonly List parties=new();
public ReadOnlyCollection Parties { get; }
#endregion
#region Constructeurs
public Joueur(string pseudo)
{
this.Pseudo = pseudo;
Parties = new ReadOnlyCollection(parties);
}
public Joueur(long id, string pseudo) : this(pseudo)
{
this.id = id;
}
#endregion
#region Accesseurs
public long Id
{
get { return id; }
}
public string Pseudo
{
get { return pseudo; }
private set
{
pseudo = value;
if (string.IsNullOrWhiteSpace(pseudo) || pseudo.Length < 3)
{
throw new ArgumentException("Le pseudo ne peut pas être vide");
}
}
}
#endregion
#region Méthodes
public bool Equals(Joueur other)
{
return Pseudo.Equals(other.Pseudo);
}
public void setNom(string nom)
{
Pseudo = nom;
}
public override bool Equals(object obj)
{
if(ReferenceEquals(obj, null)) return false;
if(ReferenceEquals(obj, this)) return true;
if(GetType() != obj.GetType()) return false;
return Equals(obj as Joueur);
}
public override int GetHashCode()
{
return Pseudo.GetHashCode();
}
public void AddPartie(Partie p)
{
if(Parties.Contains(p))
throw new ArgumentException("la partie existe deja");
parties.Add(p);
}
private string GetDebuggerDisplay()
{
return ToString();
}
#endregion
}
}