package service

import (
	"errors"
	"fmt"

	"github.com/tidbcloud/cluster-service-ng/internal/cluster-agent/internal/sqlexec"
)

type sqlexecErrorLogger interface {
	Errorf(template string, args ...any)
}

type safeLoggableSQLError interface {
	error
	CauseForLog() string
}

func logSQLError(logger sqlexecErrorLogger, operation string, err error) string {
	var execErr safeLoggableSQLError
	if errors.As(err, &execErr) {
		sanitizedCause := sqlexec.SanitizeSQLError(errors.New(execErr.CauseForLog()))
		logger.Errorf("%s: %s", operation, sanitizedCause)
		return fmt.Sprintf("%s: %s", operation, sanitizedCause)
	}

	sanitizedMsg := sqlexec.SanitizeSQLError(err)
	msg := fmt.Sprintf("%s: %s", operation, sanitizedMsg)
	logger.Errorf("%s: %s", operation, sanitizedMsg)
	return msg
}
