<?php

namespace Illuminate\Database\Eloquent;

use Illuminate\Support\Traits\EnumeratesValues;

/**
 * @template TValue
 * @extends \Illuminate\Support\Collection<array-key, 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): mixed $callback
     * @return \Illuminate\Support\Collection<array-key, mixed>
     */
    public function flatMap(callable $callback) {}

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