package records

import (
	"context"
	"database/sql/driver"
	"fmt"
	"regexp"

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

type legacyAuditQueryMatcher struct {
	insertSQL string
}

func (m *legacyAuditQueryMatcher) Match(expectedSQL, actualSQL string) error {
	if expectedSQL == "capture-audit-bulk" {
		m.insertSQL = actualSQL
		return nil
	}
	if expectedSQL == "capture-audit-outbox" {
		return nil
	}
	matched, err := regexp.MatchString(expectedSQL, actualSQL)
	if err != nil {
		return err
	}
	if !matched {
		return fmt.Errorf("SQL %q does not match %q", actualSQL, expectedSQL)
	}
	return nil
}

type legacyAuditArgumentCapture struct {
	value *driver.Value
}

func (c legacyAuditArgumentCapture) Match(value driver.Value) bool {
	*c.value = value
	return true
}

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

func (r *legacyAuditMetadataRepo) GetSchemaByAPIName(context.Context, string) (*models.ObjectMetadata, error) {
	return r.schema, nil
}

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

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