package routes

import (
	"net/http"

	"nitipabsen/backend/handlers"
	authmiddleware "nitipabsen/backend/middleware"

	"github.com/go-chi/chi/v5"
)

func SetupRoutes(r chi.Router) {
	auth := handlers.AuthHandler{}
	attendance := handlers.AttendanceHandler{}
	period := handlers.PeriodHandler{}
	r.Get("/api/health", func(w http.ResponseWriter, _ *http.Request) {
		w.Header().Set("Content-Type", "application/json")
		w.Write([]byte(`{"status":"ok"}`))
	})
	r.Route("/api/auth", func(r chi.Router) {
		r.Post("/register", auth.Register)
		r.Post("/login", auth.Login)
		r.Get("/me", auth.Me)
		r.Post("/logout", auth.Logout)
	})
	r.With(authmiddleware.RequireAuth).Get("/api/attendance", attendance.List)
	r.With(authmiddleware.RequireAuth).Put("/api/attendance", attendance.Upsert)
	r.With(authmiddleware.RequireAuth).Delete("/api/attendance", attendance.Delete)
	r.With(authmiddleware.RequireAuth).Get("/api/attendance/", attendance.List)
	r.With(authmiddleware.RequireAuth).Put("/api/attendance/", attendance.Upsert)
	r.With(authmiddleware.RequireAuth).Delete("/api/attendance/", attendance.Delete)

	r.With(authmiddleware.RequireAuth).Get("/api/periods", period.List)
	r.With(authmiddleware.RequireAuth).Post("/api/periods", period.Save)
	r.With(authmiddleware.RequireAuth).Delete("/api/periods", period.Delete)
	r.With(authmiddleware.RequireAuth).Get("/api/periods/", period.List)
	r.With(authmiddleware.RequireAuth).Post("/api/periods/", period.Save)
	r.With(authmiddleware.RequireAuth).Delete("/api/periods/", period.Delete)
}
