package automation

import (
	"context"

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

type superUserCapabilityChecker interface {
	HasSuperUserCapability(ctx context.Context, user *models.UserSession) bool
}

type effectiveSystemPermissionProvider interface {
	GetEffectiveSystemPermissions(ctx context.Context, userID, profileID string) (map[string]bool, error)
}

func userHasSuperUserCapability(ctx context.Context, user *models.UserSession, provider interface{}) bool {
	if user == nil || provider == nil {
		return false
	}
	if checker, ok := provider.(superUserCapabilityChecker); ok {
		return checker.HasSuperUserCapability(ctx, user)
	}
	permProvider, ok := provider.(effectiveSystemPermissionProvider)
	if !ok {
		return false
	}
	perms, err := permProvider.GetEffectiveSystemPermissions(ctx, user.ID, user.ProfileID)
	if err != nil {
		return false
	}
	return constants.HasSuperUserCapability(perms)
}
