package api

import (
	"github.com/gin-gonic/gin"
	"github.com/jmoiron/sqlx"
	"holiday-api/domain/holiday"
)

func RegisterRoutes(server *gin.Engine, db *sqlx.DB) {

	holidayService := holiday.HolidayService{DB: db}
	countryService := holiday.CountryService{DB: db}
	yearService := holiday.YearService{DB: db}

	server.GET("/", GetIndex(holidayService, countryService, yearService))
	server.GET("/documentation", GetDocumentation(countryService, yearService))

	server.GET("/api/v1/holidays", GetHolidays(holidayService))

	auth := Auth()

	adminGroup := server.Group("/admin", auth)
	adminGroup.GET("/", GetAdminHome(holidayService, countryService, yearService))
	adminGroup.POST("/holidays", CreateOrUpdateHoliday(holidayService))
	adminGroup.POST("/holidays/copy", CopyYear(holidayService))
	adminGroup.POST("/holidays/:id/delete", DeleteHoliday(holidayService))
	adminGroup.GET("countries", GetCountries(countryService))
	adminGroup.POST("countries", CreateOrUpdateCountry(countryService))
	adminGroup.POST("countries/:id/delete", DeleteCountry(countryService))

	dialogGroup := server.Group("/admin/dialogs", auth)
	dialogGroup.GET("/add-country", AddCountryDialog())
	dialogGroup.GET("/edit-country", EditCountryDialog(countryService))
	dialogGroup.GET("/delete-country", DeleteCountryDialog(countryService))
	dialogGroup.GET("/add-holiday", AddHolidayDialog(countryService))
	dialogGroup.GET("/edit-holiday", EditHolidayDialog(holidayService, countryService))
	dialogGroup.GET("/delete-holiday", DeleteHolidayDialog(holidayService))
	dialogGroup.GET("/copy-year", CopyYearDialog())
}
