package health

import (
	"fmt"
	"strings"

	"github.com/eternal-flame-AD/yoake/internal/echoerror"
	"github.com/labstack/echo/v4"
)

func RESTParseShorthand() func(c echo.Context) error {
	return func(c echo.Context) error {
		defer func() {
			if err := recover(); err != nil {
				c.Error(echoerror.NewHttp(500, fmt.Errorf("internal error: %v", err)))
			}
		}()
		var inputStr string
		if c.Request().Method == "GET" {
			inputStr = c.QueryParam("shorthand")
		} else if c.Request().Method == "POST" {
			inputStr = c.FormValue("shorthand")
		} else {
			return echoerror.NewHttp(405, fmt.Errorf("unsupported method"))
		}
		inputStr = strings.TrimSpace(inputStr)
		parsed, err := ParseShorthand(inputStr)
		if err != nil {
			return echoerror.NewHttp(400, err)
		}
		return c.JSON(200, parsed)
	}
}

func RESTFormatShorthand() func(c echo.Context) error {
	return func(c echo.Context) error {
		defer func() {
			if err := recover(); err != nil {
				c.Error(echoerror.NewHttp(500, fmt.Errorf("internal error: %v", err)))
			}
		}()
		var input Direction
		if err := c.Bind(&input); err != nil {
			return echoerror.NewHttp(400, err)
		}
		name, formatted := input.ShortHand()
		return c.JSON(200, map[string]string{
			"name":         name,
			"direction":    formatted,
			"__disclaimer": DirectionDisclaimer,
		})
	}
}