<?php

declare(strict_types=1);

namespace Database\Factories;

use App\Models\EnvironmentReview;
use App\Models\EnvironmentReviewSection;
use App\Support\EnvironmentReviewCompletenessState;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;

/**
 * @extends Factory<EnvironmentReviewSection>
 */
class EnvironmentReviewSectionFactory extends Factory
{
    protected $model = EnvironmentReviewSection::class;

    /**
     * @return array<string, mixed>
     */
    public function definition(): array
    {
        return [
            'environment_review_id' => EnvironmentReview::factory(),
            'workspace_id' => function (array $attributes): int {
                $review = EnvironmentReview::query()->whereKey((int) $attributes['environment_review_id'])->firstOrFail();

                return (int) $review->workspace_id;
            },
            'managed_environment_id' => function (array $attributes): int {
                $review = EnvironmentReview::query()->whereKey((int) $attributes['environment_review_id'])->firstOrFail();

                return (int) $review->managed_environment_id;
            },
            'section_key' => Str::snake(fake()->words(2, true)),
            'title' => fake()->sentence(3),
            'sort_order' => fake()->numberBetween(0, 50),
            'required' => true,
            'completeness_state' => EnvironmentReviewCompletenessState::Complete->value,
            'source_snapshot_fingerprint' => fake()->sha256(),
            'summary_payload' => [
                'summary' => fake()->sentence(),
            ],
            'render_payload' => [
                'highlights' => [],
            ],
            'measured_at' => now(),
        ];
    }
}
