import java.util.ArrayList;
import java.util.List;

/**
 * Lista de reproducción por composición: tiene un ArrayList y le delega el
 * trabajo. Invariante: la duración total nunca pasa de maxSeconds.
 */
public class Playlist {
    private final int maxSeconds;
    private final ArrayList<Song> songs = new ArrayList<>();
    private int totalSeconds = 0;

    public Playlist(int maxSeconds) {
        this.maxSeconds = maxSeconds;
    }

    /** Agrega la canción si cabe; devuelve si se agregó. */
    public boolean add(Song song) {
        if (totalSeconds + song.seconds() > maxSeconds) {
            return false;
        }
        songs.add(song);                // delegación
        totalSeconds += song.seconds();
        return true;
    }

    public int totalSeconds() {
        return totalSeconds;
    }

    public int size() {
        return songs.size();            // delegación
    }

    /** Copia de solo lectura: quien la recibe no puede romper el invariante. */
    public List<Song> songs() {
        return List.copyOf(songs);
    }
}
