*/ class MediaAssignmentFactory extends Factory { public function definition(): array { $mediableType = fake()->randomElement([Document::class, Report::class]); return [ 'media_id' => Medium::factory(), 'mediable_id' => $mediableType::factory(), 'mediable_type' => $mediableType, 'collection' => fake()->randomElement(MediaCollectionEnum::cases()), ]; } public function forDocument(): static { return $this->state(fn (array $attributes) => [ 'mediable_id' => Document::factory(), 'mediable_type' => Document::class, ]); } public function forReport(): static { return $this->state(fn (array $attributes) => [ 'mediable_id' => Report::factory(), 'mediable_type' => Report::class, ]); } public function primary(): static { return $this->state(fn (array $attributes) => [ 'collection' => MediaCollectionEnum::Primary, ]); } public function history(): static { return $this->state(fn (array $attributes) => [ 'collection' => MediaCollectionEnum::History, ]); } public function attachments(): static { return $this->state(fn (array $attributes) => [ 'collection' => MediaCollectionEnum::Attachments, ]); } public function thumbnails(): static { return $this->state(fn (array $attributes) => [ 'collection' => MediaCollectionEnum::Thumbnails, ]); } public function documents(): static { return $this->state(fn (array $attributes) => [ 'collection' => MediaCollectionEnum::Documents, ]); } public function images(): static { return $this->state(fn (array $attributes) => [ 'collection' => MediaCollectionEnum::Images, ]); } }