import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.stream.Collectors;

/** Los reportes de LibraryReports sobre la biblioteca de ejemplo. */
public class ReportDemo {

    public static void main(String[] args) {
        List<Song> library = Songs.library();
        IO.println("canciones:        " + library.size());
        IO.println("duración total:   " + LibraryReports.totalDurationByArtist(library));
        IO.println("por artista:      " + LibraryReports.songsPerArtist(library));
        IO.println("top 3 artistas:   " + LibraryReports.topArtists(library, 3));
        IO.println("la más larga:     " + LibraryReports.longest(library).map(Song::title).orElse("-"));
        IO.println("de Duna:          " + LibraryReports.titlesBy(library, "Duna"));
        IO.println("lista vacía:      " + LibraryReports.longest(List.of()));

        // toMap: una entrada por elemento; aquí, de título a duración (los títulos no se repiten).
        Map<String, Integer> secondsByTitle = Songs.sample().stream()
                .collect(Collectors.toMap(Song::title, Song::seconds, Integer::sum, TreeMap::new));
        IO.println("toMap:            " + secondsByTitle);
    }
}
