package routes

import (
	"github.com/labstack/echo"
	"github.com/labstack/echo/middleware"
	apiv1 "git.mowie.cc/konrad/Library/routes/api/v1"

	"git.mowie.cc/konrad/Library/models"
)

func NewEcho() *echo.Echo {
	e := echo.New()

	// Logger
	e.Use(middleware.LoggerWithConfig(middleware.LoggerConfig{
		Format: "${time_rfc3339}: ${remote_ip} ${method} ${status} ${uri} - ${user_agent}\n",
	}))

	// Static Content
	e.Static("/assets", "assets")

	return e
}

func RegisterRoutes(e *echo.Echo) {

	// API Routes
	a := e.Group("/api/v1")
	// Lookup Books
	a.GET("/books", apiv1.BookList)
	a.GET("/books/:id", apiv1.BookShow)
	a.GET("/books/search", apiv1.BookSearch)

	// Lookup Authors
	a.GET("/authors", apiv1.AuthorsList)
	a.GET("/authors/:id", apiv1.AuthorShow)
	a.GET("/authors/search", apiv1.AuthorSearch)

	// Lookup Publishers
	a.GET("/publishers", apiv1.PublishersList)
	a.GET("/publishers/:id", apiv1.PublisherShow)
	a.GET("/publishers/search", apiv1.PublisherSearch)

	// Login Route
	e.POST("/login", Login)


	// ===== Routes with Authetification =====
	// Authetification
	a.Use(middleware.JWT(models.Config.JWTLoginSecret))
	a.POST("/tokenTest", apiv1.CheckToken)

	// Manage Books
	a.PUT("/books", apiv1.BookAdd)
	a.DELETE("/books/:id", apiv1.BookDelete)

	// Manage Authors
	a.PUT("/authors", apiv1.AuthorAdd)
	a.DELETE("/authors/:id", apiv1.AuthorDelete)
	a.POST("/authors/:id", apiv1.AuthorUpdate)

	// Manage Publishers
	a.PUT("/publishers", apiv1.PublisherAdd)
	a.DELETE("/publishers/:id", apiv1.PublisherDelete)

	// Manage Users

	/*
	Alles nur mit Api machen, davor dann einen onepager mit vue.js.

	(Alles mit | benötigt Authentifizierung)

	Routes:
	GET    / 					   - entweder übersicht anzeigen (wenn der nutzer eingeloggt ist) oder auf /login weiterleiten
	POST   /login 				   - ✔ Einloggen
	POST   /logout				   - ausloggen

	GET    /books/:id			   - ✔ Buch anzeigen
	POST   /books/:id	           - |Buch bearbeiten (inkl mengen)
	DELETE /books/:id	     	   - ✔ |Buch löschen (+alle einträge in authors_books löschen dessen Bush dazu gehört)
	GET    /books/search?s=se      - ✔ Suchen
	GET    /books/list			   - ✔ Auflisten
	PUT    /books/add			   - ✔ |Hinzufügen

	GET    /authors/:id		       - ✔ Autor anzeigen
	POST   /authors/:id       	   - |Autor bearbeiten
	DELETE /authors/:id			   - ✔ |Autor löschen (auch mit allem in books_author)
	GET    /authors/list		   - ✔ Autoren auflisten
	GET    /authors/search?s=d     - ✔ Autoren suchen
	PUT    /authors/add		  	   - ✔ |Hinzufügen

	GET    /publishers/:id		   - ✔ Verlag anzeigen
	POST   /publishers/:id		   - |Verlag bearbeiten
	DELETE /publishers/:id		   - ✔ |Verlag löschen (bei büchern Verlag auf 0 setzen)
	GET    /publishers/list	       - ✔ Verlage auflisten
	GET    /publishers/search?s=   - ✔ Verlage suchen
	PUT    /publishers/add		   - ✔ |Hinzufügen

	GET    /settings			   - |Nutzereinstellungen (Passwort, name etc)
	POST   /settings			   - |Nutzereinstellungen (Passwort, name etc)
	GET    /user 				   - Nutzer anzeigen
	PUT    /user 			  	   - |neue Nutzer anlegen
	DELETE /user/:id 			   - |nutzer löschen
	POST   /user/:id	 		   - |nutzer bearbeiten
	*/
}
