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

/** Orden natural, órdenes con comparadores y un TreeSet que pierde canciones. */
public class SortDemo {

    static void print(String title, Iterable<Song> songs) {
        IO.println(title);
        for (Song s : songs) {
            IO.println("  " + s.seconds() + "  " + s.artist() + " - " + s.title());
        }
    }

    public static void main(String[] args) {
        List<Song> songs = Songs.sample();

        Collections.sort(songs);                    // orden natural: compareTo
        print("Por título (Comparable):", songs);

        songs.sort(new ByDuration());               // un orden alternativo
        print("Por duración (ByDuration):", songs);

        songs.sort(new ByArtistThenTitle());        // dos criterios
        print("Por artista y título:", songs);

        TreeSet<Song> byDuration = new TreeSet<>(new ByDuration());
        byDuration.addAll(songs);
        IO.println("Lista: " + songs.size() + " canciones; TreeSet(ByDuration): "
                + byDuration.size());

        List<Song> copy = new ArrayList<>(songs);
        Collections.reverse(copy);
        IO.println("La más larga: " + Collections.max(copy, new ByDuration()).title());
    }
}
