package schema

import (
	"testing"

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

func TestCloneRollupConfigDeepCopiesFilter(t *testing.T) {
	filter := "Amount__c > 0"
	resultType := models.FieldType(constants.FieldTypeCurrency)
	precision := 18
	scale := 2
	original := &models.RollupConfig{
		SummaryObject:     "Child__c",
		SummaryField:      "Amount__c",
		RelationshipField: "ParentId",
		CalcType:          "SUM",
		Filter:            &filter,
		ResultType:        &resultType,
		ResultPrecision:   &precision,
		ResultScale:       &scale,
	}

	cloned := CloneRollupConfig(original)
	if cloned == nil {
		t.Fatal("CloneRollupConfig returned nil")
	}
	if cloned == original {
		t.Fatal("CloneRollupConfig returned the original pointer")
	}
	if cloned.Filter == nil || *cloned.Filter != filter {
		t.Fatalf("cloned Filter = %#v, want %q", cloned.Filter, filter)
	}
	if cloned.Filter == original.Filter {
		t.Fatal("CloneRollupConfig reused the original Filter pointer")
	}
	if cloned.ResultType == nil || *cloned.ResultType != resultType || cloned.ResultType == original.ResultType {
		t.Fatal("CloneRollupConfig did not deep-copy ResultType")
	}
	if cloned.ResultPrecision == nil || *cloned.ResultPrecision != precision || cloned.ResultPrecision == original.ResultPrecision {
		t.Fatal("CloneRollupConfig did not deep-copy ResultPrecision")
	}
	if cloned.ResultScale == nil || *cloned.ResultScale != scale || cloned.ResultScale == original.ResultScale {
		t.Fatal("CloneRollupConfig did not deep-copy ResultScale")
	}
}
