package validation

import (
	"testing"

	"github.com/nexuscrm/kernel/pkg/schemautil"
	"github.com/nexuscrm/shared/pkg/constants"
	"github.com/nexuscrm/shared/pkg/models"
)

func TestSchemaValidatorAcceptsExactDecimalWithoutFloatRoundTrip(t *testing.T) {
	precision, scale := 38, 9
	schema := &models.ObjectMetadata{APIName: "WorkItem", Fields: []models.FieldMetadata{{
		APIName: "Amount", Type: constants.FieldTypeCurrency, Createable: true,
		Precision: &precision, Scale: &scale,
	}}}
	record := models.SObject{"Amount": schemautil.ExactDecimal("12345678901234567890123456789.123456789")}
	if err := NewSchemaValidator().ValidateSchemaCompliance(record, schema, false, true, false); err != nil {
		t.Fatalf("exact decimal rejected: %v", err)
	}
	record["Amount"] = schemautil.ExactDecimal("123456789012345678901234567890.123456789")
	if err := NewSchemaValidator().ValidateSchemaCompliance(record, schema, false, true, false); err == nil {
		t.Fatal("one-over integer precision accepted")
	}
	record["Amount"] = schemautil.ExactDecimal("1.1234567890")
	if err := NewSchemaValidator().ValidateSchemaCompliance(record, schema, false, true, false); err == nil {
		t.Fatal("one-over scale accepted")
	}
	record["Amount"] = schemautil.ExactDecimal("not-a-decimal")
	if err := NewSchemaValidator().ValidateSchemaCompliance(record, schema, false, true, false); err == nil {
		t.Fatal("malformed ExactDecimal accepted")
	}
}
