using System.Collections;
using MaBibli.Shared.Dtos;
namespace MaBibli.Client.Composants;
///
/// Vue « liste de noms » des auteurs d'une saisie, pour que SaisieListe les remplisse
/// comme il remplit les thèmes.
///
///
/// ⚠️ Un auteur n'est pas un nom : il porte aussi son rôle sur ce livre (scénario,
/// dessin…), qui vit sur le lien et non sur la personne. Renommer par l'indexeur conserve
/// donc le rôle — c'est ce qui remplace la reprise des rôles que faisait
/// EnregistrementLivre.Decouper quand le champ des noms se reconstruisait à chaque
/// frappe : ici la ligne n'est pas reconstruite, elle est corrigée.
///
/// La liste sous-jacente est celle de la saisie, modifiée en place : cette vue n'en garde
/// aucune copie qui pourrait diverger.
///
///
public sealed class NomsAuteurs(IList auteurs) : IList
{
public int Count => auteurs.Count;
public bool IsReadOnly => false;
public string this[int index]
{
get => auteurs[index].Nom;
set => auteurs[index] = auteurs[index] with { Nom = value };
}
public void Add(string nom) => auteurs.Add(new AuteurSaisi(nom));
public void Insert(int index, string nom) => auteurs.Insert(index, new AuteurSaisi(nom));
public void RemoveAt(int index) => auteurs.RemoveAt(index);
public void Clear() => auteurs.Clear();
public bool Contains(string nom) => IndexOf(nom) >= 0;
public int IndexOf(string nom)
{
for (var i = 0; i < auteurs.Count; i++)
{
if (auteurs[i].Nom == nom)
{
return i;
}
}
return -1;
}
public bool Remove(string nom)
{
var index = IndexOf(nom);
if (index < 0)
{
return false;
}
auteurs.RemoveAt(index);
return true;
}
public void CopyTo(string[] tableau, int index)
{
foreach (var auteur in auteurs)
{
tableau[index++] = auteur.Nom;
}
}
public IEnumerator GetEnumerator() => auteurs.Select(a => a.Nom).GetEnumerator();
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
}