package health

import (
	"sync"

	"github.com/eternal-flame-AD/yoake/internal/auth"
	"github.com/eternal-flame-AD/yoake/internal/comm"
	"github.com/eternal-flame-AD/yoake/internal/db"
	"github.com/labstack/echo/v4"
)

func Register(g *echo.Group, db db.DB, comm *comm.Communicator) {
	megsG := g.Group("/meds")
	{
		shortHands := megsG.Group("/shorthand")
		{
			shortHands.GET("/parse", RESTParseShorthand())
			shortHands.POST("/parse", RESTParseShorthand())

			shortHands.POST("/format", RESTFormatShorthand())
		}

		writeMutex := new(sync.Mutex)
		directions := megsG.Group("/directions", auth.RequireMiddleware(auth.RoleAdmin))
		{
			directions.GET("", RESTMedGetDirections(db))
			directions.POST("", RESTMedPostDirections(db, writeMutex))
			directions.DELETE("/:name", RESTMedDeleteDirections(db, writeMutex))
		}

		compliance := megsG.Group("/compliance", auth.RequireMiddleware(auth.RoleAdmin))
		{
			complianceByMed := compliance.Group("/med/:med")
			{
				complianceByMed.GET("/log", RESTComplianceLogGet(db))
				complianceByMed.GET("/project", RESTComplianceLogProjectMed(db))
			}

			compliance.GET("/log", RESTComplianceLogGet(db))

			compliance.POST("/log", RESTComplianceLogPost(db, writeMutex))
		}
	}
}