import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;

import java.util.List;
import org.junit.jupiter.api.Test;

class PlaylistTest {
    private final Song a = new Song("A", "X", 215);
    private final Song b = new Song("B", "X", 180);
    private final Song c = new Song("C", "X", 260);

    @Test
    void rejectsSongThatDoesNotFit() {
        Playlist p = new Playlist(600);
        assertTrue(p.add(a));
        assertTrue(p.add(b));
        assertFalse(p.add(c));
        assertEquals(395, p.totalSeconds());
        assertEquals(2, p.size());
    }

    @Test
    void songsReturnsAReadOnlyCopy() {
        Playlist p = new Playlist(600);
        p.add(a);
        List<Song> view = p.songs();
        assertThrows(UnsupportedOperationException.class, () -> view.add(c));
    }

    @Test
    void inheritedPlaylistLetsInheritedMethodsBreakTheLimit() {
        // Documenta el problema: los métodos heredados se saltan la validación.
        InheritedPlaylist bad = new InheritedPlaylist(600);
        bad.add(a);
        bad.add(0, c);
        bad.add(0, c);
        assertTrue(bad.totalSeconds() > 600);
    }

    @Test
    void songsCompareByDuration() {
        assertTrue(b.compareTo(a) < 0);
        assertEquals(0, a.compareTo(new Song("otra", "X", 215)));
    }
}
