<?php

namespace App\Interfaces;

use App\Models\User;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Pagination\LengthAwarePaginator;

interface UserRepositoryInterface
{
    public function findById(int $id): ?User;
    public function findByEmail(string $email): ?User;
    public function findByGoogleId(string $googleId): ?User;
    public function create(array $data): User;
    public function update(int $id, array $data): bool;
    public function getLeaderboard(int $limit = 50): Collection;
    public function paginate(int $perPage = 30, ?string $search = null): LengthAwarePaginator;
    public function awardPoints(int $userId, int $points, string $reason, ?object $pointable = null): void;
    public function updateFanLevel(int $userId): void;
    public function recordCheckin(int $userId): void;
    public function anonymize(int $userId): void;
}
