package rest_test

import (
	"bytes"
	"encoding/json"
	"net/http"
	"net/http/httptest"
	"testing"

	"github.com/gin-gonic/gin"
	"github.com/nexuscrm/backend/internal/interfaces/rest"
	"github.com/stretchr/testify/assert"
)

// ---------------------------------------------------------------------------
// HandleTreeCreate — input validation
// ---------------------------------------------------------------------------

func TestCompositeTreeHandler_HandleTreeCreate_InvalidJSON(t *testing.T) {
	handler := rest.NewCompositeTreeHandler(nil)
	w := httptest.NewRecorder()
	c, _ := gin.CreateTestContext(w)
	c.Request = httptest.NewRequest("POST", "/composite/tree/Account", bytes.NewReader([]byte(`{bad`)))
	c.Request.Header.Set("Content-Type", "application/json")
	c.Params = gin.Params{{Key: "objectName", Value: "Account"}}

	handler.HandleTreeCreate(c)
	assert.Equal(t, http.StatusBadRequest, w.Code)
}

func TestCompositeTreeHandler_HandleTreeCreate_TooManyRecords(t *testing.T) {
	handler := rest.NewCompositeTreeHandler(nil)

	records := make([]map[string]interface{}, 201)
	for i := range records {
		records[i] = map[string]interface{}{"Name": "test"}
	}
	body, _ := json.Marshal(map[string]interface{}{
		"records": records,
	})

	w := httptest.NewRecorder()
	c, _ := gin.CreateTestContext(w)
	c.Request = httptest.NewRequest("POST", "/composite/tree/Account", bytes.NewReader(body))
	c.Request.Header.Set("Content-Type", "application/json")
	c.Params = gin.Params{{Key: "objectName", Value: "Account"}}

	handler.HandleTreeCreate(c)
	assert.Equal(t, http.StatusBadRequest, w.Code)
}
