package models

import "fmt"

type Book struct {
	ID int64 `xorm:"int(11) autoincr not null unique pk"`
	Title string `xorm:"varchar(250) not null"`
	Isbn string `xorm:"varchar(30)"`
	Year int64 `xorm:"int(11)"`
	Price float64 `xorm:"double"`
	Status int64 `xorm:"int(11)"`
	Publisher int64 `xorm:"int(11)"`
	Created int64 `xorm:"created"`
	Updated int64 `xorm:"updated"`

	PublisherFull Publisher `xorm:"-"`
	Authors []Author `xorm:"-"`
}

func (Book) TableName() string{
	return "books"
}

func GetBookById(ID int64) (book Book, exists bool, err error)  {
	// Get the Book
	has, err := x.ID(ID).Get(&book)

	// Get publisher
	publisher := Publisher{ID: book.Publisher}
	_, err = x.Get(&publisher)
	if err != nil {
		fmt.Println("Error getting publisher:", err)
	}
	book.PublisherFull = publisher

	// Get all authors
	var authors []Author
	err = x.
	Table("authors_books").
		Join("INNER", "authors", "authors_books.author_id = authors.id").
		Where("book_id = ?", book.ID).
		Find(&authors)

	if err != nil {
		fmt.Println("Error getting authors:", err)
	}

	book.Authors = authors

	return book, has, err
}