// codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/domain/user/interface.go
package user

import (
	"context"
	"time"

	"github.com/gocql/gocql"
)

// Repository Interface for user management.
type Repository interface {
	Create(ctx context.Context, m *User) error
	GetByID(ctx context.Context, id gocql.UUID) (*User, error)
	GetByEmail(ctx context.Context, email string) (*User, error)
	GetByVerificationCode(ctx context.Context, verificationCode string) (*User, error)
	DeleteByID(ctx context.Context, id gocql.UUID) error
	DeleteByEmail(ctx context.Context, email string) error
	CheckIfExistsByEmail(ctx context.Context, email string) (bool, error)
	UpdateByID(ctx context.Context, m *User) error
	AnonymizeOldIPs(ctx context.Context, cutoffDate time.Time) (int, error)
	AnonymizeUserIPs(ctx context.Context, userID gocql.UUID) error // For GDPR right-to-be-forgotten
}
