package benefactoraddresshandler

import (
	"net/http"

	param "git.gocasts.ir/ebhomengo/niki/param/benefactor/address"
	"git.gocasts.ir/ebhomengo/niki/pkg/claim"
	httpmsg "git.gocasts.ir/ebhomengo/niki/pkg/http_msg"
	"github.com/labstack/echo/v4"
)

// UpdateAddress godoc
// @Summary      Edit benefactor address
// @Tags         Address
// @Accept       json
// @Produce      json
// @Param        id path int true "Address ID"
// @Param        Request body   param.UpdateAddressRequest true "Edit address details"
// @Success      204
// @Failure      400  {string}  "Bad request"
// @Security 	 AuthBearerBenefactor
// @Router       /address/{id} [patch]
func (h Handler) UpdateAddress(c echo.Context) error {
	var req param.UpdateAddressRequest
	if bErr := c.Bind(&req); bErr != nil {

		return echo.NewHTTPError(http.StatusBadRequest)
	}

	if bErr := echo.PathParamsBinder(c).Uint("id", &req.ID).BindError(); bErr != nil {

		return echo.NewHTTPError(http.StatusBadRequest)
	}

	claims := claim.GetClaimsFromEchoContext(c)
	req.BenefactorID = claims.UserID

	if fieldErrors, err := h.addressVld.ValidateUpdateAddress(req); err != nil {
		msg, code := httpmsg.Error(err)

		return c.JSON(code, echo.Map{
			"message": msg,
			"errors":  fieldErrors,
		})
	}
	sErr := h.addressSvc.Update(c.Request().Context(), req)

	if sErr != nil {
		msg, code := httpmsg.Error(sErr)

		return echo.NewHTTPError(code, msg)
	}

	return c.JSON(http.StatusNoContent, nil)
}
