package handlers

import (
	"net/http"

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

	ocrService "rmser/internal/services/ocr"
	"rmser/pkg/logger"
)

type OCRHandler struct {
	service *ocrService.Service
}

func NewOCRHandler(service *ocrService.Service) *OCRHandler {
	return &OCRHandler{service: service}
}

// GetCatalog возвращает список товаров для OCR сервиса
func (h *OCRHandler) GetCatalog(c *gin.Context) {
	items, err := h.service.GetCatalogForIndexing()
	if err != nil {
		logger.Log.Error("Ошибка получения каталога для OCR", zap.Error(err))
		c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
		return
	}
	c.JSON(http.StatusOK, items)
}

type MatchRequest struct {
	RawName   string `json:"raw_name" binding:"required"`
	ProductID string `json:"product_id" binding:"required"`
}

// SaveMatch сохраняет привязку (обучение)
func (h *OCRHandler) SaveMatch(c *gin.Context) {
	var req MatchRequest
	if err := c.ShouldBindJSON(&req); err != nil {
		c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		return
	}

	pID, err := uuid.Parse(req.ProductID)
	if err != nil {
		c.JSON(http.StatusBadRequest, gin.H{"error": "invalid product_id format"})
		return
	}

	if err := h.service.SaveMapping(req.RawName, pID); err != nil {
		logger.Log.Error("Ошибка сохранения матчинга", zap.Error(err))
		c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
		return
	}

	c.JSON(http.StatusOK, gin.H{"status": "saved"})
}
