package user

import "context"

// Repository defines the interface for user data access
// All methods require tenantID for multi-tenant isolation
type Repository interface {
	// Create creates a new user
	Create(ctx context.Context, tenantID string, user *User) error

	// GetByID retrieves a user by ID
	GetByID(ctx context.Context, tenantID string, id string) (*User, error)

	// GetByEmail retrieves a user by email within a specific tenant
	GetByEmail(ctx context.Context, tenantID string, email string) (*User, error)

	// GetByEmailGlobal retrieves a user by email across all tenants (for login)
	// This should only be used for authentication where tenant is not yet known
	GetByEmailGlobal(ctx context.Context, email string) (*User, error)

	// Update updates an existing user
	Update(ctx context.Context, tenantID string, user *User) error

	// Delete deletes a user by ID
	Delete(ctx context.Context, tenantID string, id string) error

	// ListByDate lists users created within a date range
	ListByDate(ctx context.Context, tenantID string, startDate, endDate string, limit int) ([]*User, error)
}
