package handlers

import (
	"net/http"

	"github.com/gin-gonic/gin"
	"go.uber.org/zap"

	invService "rmser/internal/services/invoices"
	"rmser/pkg/logger"
)

type InvoiceHandler struct {
	service *invService.Service
}

func NewInvoiceHandler(service *invService.Service) *InvoiceHandler {
	return &InvoiceHandler{service: service}
}

// SendInvoice godoc
// @Summary Создать приходную накладную в iikoRMS
// @Description Принимает JSON с данными накладной и отправляет их в iiko
// @Tags invoices
// @Accept json
// @Produce json
// @Param input body invService.CreateRequestDTO true "Invoice Data"
// @Success 200 {object} map[string]string "created_number"
// @Failure 400 {object} map[string]string
// @Failure 500 {object} map[string]string
func (h *InvoiceHandler) SendInvoice(c *gin.Context) {
	var req invService.CreateRequestDTO
	if err := c.ShouldBindJSON(&req); err != nil {
		c.JSON(http.StatusBadRequest, gin.H{"error": "Неверный формат JSON: " + err.Error()})
		return
	}

	docNum, err := h.service.SendInvoiceToRMS(req)
	if err != nil {
		logger.Log.Error("Ошибка отправки накладной", zap.Error(err))
		// Возвращаем 502 Bad Gateway, т.к. ошибка скорее всего на стороне RMS
		c.JSON(http.StatusBadGateway, gin.H{"error": err.Error()})
		return
	}

	c.JSON(http.StatusOK, gin.H{
		"status":         "ok",
		"created_number": docNum,
	})
}
