package main

import (
	"fmt"
	"sort"
)

func main() {
	l := list{
		{title: "moby dick", price: 10, released: toTimestamp(118281600)},
		{title: "odyssey", price: 15, released: toTimestamp("733622400")},
		{title: "hobbit", price: 25},
	}

	// sort.Sort(l)
	// sort.Sort(sort.Reverse(l))
	// sort.Sort(byReleaseDate(l))
	sort.Sort(sort.Reverse(byReleaseDate(l)))

	fmt.Print(l)
}

/*
Summary:

- sort.Sort() can sort any type that implements the sort.Interface

- sort.Interface has three methods: Len(), Less(), Swap()
  - Len() returns the length of a collection.
  - Less(i, j) should return true when an element comes before another one.
  - Swap(i, j)s the elements when Less() returns true.

- sort.Reverse() can reverse sort a type that satisfies the sort.Interface.

- You can customize the sorting:
  - Either by implementing the sort.Interface methods,
  - or by anonymously embedding a type that already satisfies the sort.Interface
  - and adding a Less() method.

- Anonymous embedding means auto-forwarding method calls to an embedded value.
*/
