import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

/**
 * Una lista de reproducción que no admite canciones repetidas.
 * Invariante: songs no tiene dos canciones iguales (según equals).
 */
public class Playlist implements Iterable<Song> {

    private final List<Song> songs = new ArrayList<>();

    /** Agrega la canción si no estaba; devuelve si se agregó. */
    public boolean add(Song song) {
        if (songs.contains(song)) {
            return false;
        }
        return songs.add(song);
    }

    /** Una vista de solo lectura: refleja los cambios, pero no permite hacerlos. */
    public List<Song> songs() {
        return Collections.unmodifiableList(songs);
    }

    public int size() {
        return songs.size();
    }

    /** Recorrer la lista con for-each, sin exponerla. */
    @Override
    public Iterator<Song> iterator() {
        return songs().iterator();
    }
}
