package handler

import (
	"net/http"
	"strconv"

	"x-agents/server/internal/service"

	"github.com/gin-gonic/gin"
)

// MemoryHandler 记忆处理器
type MemoryHandler struct {
	memoryService *service.MemoryService
}

// NewMemoryHandler 创建记忆处理器
func NewMemoryHandler(memoryService *service.MemoryService) *MemoryHandler {
	return &MemoryHandler{
		memoryService: memoryService,
	}
}

// CreateMemoryRequest 创建记忆请求
type CreateMemoryRequest struct {
	AgentID    string `json:"agent_id" binding:"required"`
	UserID     string `json:"user_id"`
	Content    string `json:"content" binding:"required"`
	MemoryType string `json:"memory_type"`
	Importance int    `json:"importance"`
}

// CreateMemory 创建记忆
func (h *MemoryHandler) CreateMemory(c *gin.Context) {
	var req CreateMemoryRequest
	if err := c.ShouldBindJSON(&req); err != nil {
		c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		return
	}

	// 设置默认值
	memoryType := req.MemoryType
	if memoryType == "" {
		memoryType = "conversation"
	}
	importance := req.Importance
	if importance == 0 {
		importance = 5
	}

	memory, err := h.memoryService.CreateMemory(req.AgentID, req.UserID, req.Content, memoryType, importance)
	if err != nil {
		c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
		return
	}

	c.JSON(http.StatusOK, memory)
}

// GetMemories 获取记忆列表
func (h *MemoryHandler) GetMemories(c *gin.Context) {
	agentID := c.Param("id")
	userID := c.Query("user_id")
	limitStr := c.DefaultQuery("limit", "10")

	limit, err := strconv.Atoi(limitStr)
	if err != nil {
		limit = 10
	}

	memories, err := h.memoryService.GetMemories(agentID, userID, limit)
	if err != nil {
		c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
		return
	}

	c.JSON(http.StatusOK, memories)
}

// DeleteMemory 删除记忆
func (h *MemoryHandler) DeleteMemory(c *gin.Context) {
	memoryID := c.Param("memory_id")

	err := h.memoryService.DeleteMemory(memoryID)
	if err != nil {
		c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
		return
	}

	c.JSON(http.StatusOK, gin.H{"message": "Memory deleted successfully"})
}
