package records

import (
	"context"
	"testing"

	"github.com/nexuscrm/kernel/pkg/ports"
	"github.com/nexuscrm/kernel/pkg/utils"
	"github.com/nexuscrm/metadata"
	"github.com/nexuscrm/shared/pkg/constants"
	"github.com/nexuscrm/shared/pkg/models"
)

func TestGenericRecordInsertUsesUUIDThatFitsOwnedStorage(t *testing.T) {
	schema := &models.ObjectMetadata{
		APIName: "EnvelopeProbe__c",
		Fields: []models.FieldMetadata{{
			APIName:  constants.FieldID,
			Type:     constants.FieldTypeString,
			IsSystem: true,
		}},
	}
	metadataService := metadata.NewMetadataService(&recordIDOwnerMetadataRepo{schema: schema}, nil, nil)
	service := &PersistenceService{metadata: metadataService}

	record := service.generateSystemFields(context.Background(), schema.APIName, models.SObject{}, nil, true)
	recordID, ok := record[constants.FieldID].(string)
	if !ok {
		t.Fatalf("generated record Id = %T, want string", record[constants.FieldID])
	}
	if len(recordID) != 36 || !utils.IsValidUUID(recordID) {
		t.Fatalf("generated record Id = %q (%d bytes), want canonical 36-byte UUID", recordID, len(recordID))
	}
}

type recordIDOwnerMetadataRepo struct {
	ports.MetadataRepository
	schema *models.ObjectMetadata
}

func (r *recordIDOwnerMetadataRepo) GetAllSchemas(context.Context) ([]*models.ObjectMetadata, error) {
	return []*models.ObjectMetadata{r.schema}, nil
}

func (r *recordIDOwnerMetadataRepo) GetAllRelationships(context.Context) ([]*models.Relationship, error) {
	return nil, nil
}
