<?php

namespace Illuminate\Database\Eloquent;

use Illuminate\Support\Traits\EnumeratesValues;

/**
 * @template TValue
 * @extends \Illuminate\Support\Collection<int, TValue>
 */
class Collection extends \Illuminate\Support\Collection
{

    /** @phpstan-use EnumeratesValues<TValue> */
    use EnumeratesValues;

    /**
     * @param  mixed  $key
     * @param  mixed  $default
     * @phpstan-return TValue|null
     */
    public function find($key, $default = null) {}

    /**
     * @template TReturn
     * @param callable(TValue, int): TReturn $callable
     * @return static<TReturn>|\Illuminate\Support\Collection<int, TReturn>
     */
    public function map($callable) {}

    /**
     * @param callable(TValue, int): array<mixed> $callback
     * @return \Illuminate\Support\Collection<mixed, static<mixed>>
     */
    public function mapToGroups(callable $callback) {}

    /**
     * @param callable(TValue, int): mixed $callback
     * @return \Illuminate\Support\Collection<mixed, mixed>
     */
    public function flatMap(callable $callback) {}

    /**
     * @param callable $callback
     * @return static<mixed>|\Illuminate\Support\Collection<int, mixed>
     */
    public function mapSpread(callable $callback) {}

    /**
     * @param int $number
     * @param null|callable(int, int): mixed $callback
     * @return mixed
     */
    public static function times($number, callable $callback = null) {}

    /**
     * @param string|array<mixed> $value
     * @param string|null $key
     * @return \Illuminate\Support\Collection<int, mixed>
     */
    public function pluck($value, $key = null) {}
}
