<?php

namespace Illuminate\Database\Eloquent;

use Faker\Generator as Faker;
use InvalidArgumentException;
use Illuminate\Support\Traits\Macroable;

/**
 * Legacy Factory builder, a part of laravel/legacy-factories package.
 *
* @template TModel of \Illuminate\Database\Eloquent\Model
* @template TCount of positive-int
*/
class FactoryBuilder
{
    use Macroable;

    /**
     * Create an new builder instance.
     *
     * @param class-string<TModel> $class
     * @param  string  $name
     * @param  array  $definitions
     * @param  array  $states
     * @param  array  $afterMaking
     * @param  array  $afterCreating
     * @param  \Faker\Generator  $faker
     * @return void
     */
    public function __construct($class, $name, array $definitions, array $states,
                                array $afterMaking, array $afterCreating, Faker $faker)
    {

    }

    /**
     * Create a collection of models and persist them to the database.
     *
     * @param  array<string, mixed>  $attributes
     * @return (TCount is 1 ? TModel : \Illuminate\Database\Eloquent\Collection<int, TModel>)
     */
    public function create(array $attributes = []) {}

    /**
     * Create a collection of models and persist them to the database.
     *
     * @param  iterable<array-key, array|\Illuminate\Contracts\Support\Arrayable>  $records
     * @return \Illuminate\Database\Eloquent\Collection<int, TModel>
     */
    public function createMany(iterable $records) {}

    /**
     * Create a collection of models.
     *
     * @param  array<string, mixed>  $attributes
     * @return (TCount is 1 ? TModel : \Illuminate\Database\Eloquent\Collection<int, TModel>)
     */
    public function make(array $attributes = []) {}

    /**
     * Set the amount of models you wish to create / make.
     * @template TTimesCount of positive-int
     * @param  TTimesCount  $amount
     * @return static<TModel, TTimesCount>
     */
    public function times($amount) {}

    /**
     * Run after making callbacks on a collection of models.
     *
     * @param  \Illuminate\Support\Collection<int, TModel>  $models
     * @return void
     */
    public function callAfterMaking($models) {}

    /**
     * Run after creating callbacks on a collection of models.
     *
     * @param  \Illuminate\Support\Collection<int, TModel>  $models
     * @return void
     */
    public function callAfterCreating($models) {}
}
