package query

import (
	"strings"

	"git.yetaga.in/alazyreader/go-openlibrary/client"
	"git.yetaga.in/alazyreader/library/media"
)

type OpenLibrary struct {
	client client.Client
}

func (o *OpenLibrary) GetByISBN(isbn string) (*media.Book, error) {
	details, err := o.client.GetByISBN(isbn)
	if err != nil {
		return nil, err
	}
	return openLibraryToBook(details), nil
}

func openLibraryToBook(details *client.BookDetails) *media.Book {
	return &media.Book{
		Title:      details.Title,
		Authors:    getAuthors(details.Authors),
		SortAuthor: strings.ToLower(getLastName(tryGetFirst(getAuthors(details.Authors)))),
		Publisher:  getPublisher(details.Publishers),
		ISBN10:     tryGetFirst(details.Identifiers.ISBN10),
		ISBN13:     tryGetFirst(details.Identifiers.ISBN13),
	}
}

func getPublisher(publishers []client.Publishers) string {
	if len(publishers) == 0 {
		return ""
	}
	return publishers[0].Name
}

func getAuthors(authors []client.Authors) []string {
	ret := make([]string, len(authors))
	for _, author := range authors {
		ret = append(ret, author.Name)
	}
	return ret
}
