<?php

namespace Database\Factories;

use App\Models\PromptLandingPage;
use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;

/**
 * @extends Factory<PromptLandingPage>
 */
class PromptLandingPageFactory extends Factory
{
    /**
     * @return array<string, mixed>
     */
    public function definition(): array
    {
        return [
            'user_id' => User::factory(),
            'title' => null,
            'website_url' => null,
            'purpose' => null,
            'status' => 'queued',
            'brief' => null,
            'html' => null,
            'css' => null,
            'js' => null,
            'prompt_used' => null,
            'failure_reason' => null,
        ];
    }

    public function configured(): static
    {
        return $this->state(fn (array $attributes) => [
            'website_url' => 'https://yoga.example.com',
            'purpose' => 'Leads Page',
            'status' => 'draft',
        ]);
    }

    public function pendingApproval(): static
    {
        return $this->completed()->state(fn (array $attributes) => [
            'status' => 'pending_approval',
            'approved_at' => null,
            'approved_by' => null,
        ]);
    }

    public function approved(): static
    {
        return $this->completed()->state(fn (array $attributes) => [
            'status' => 'approved',
            'approved_at' => now(),
        ]);
    }

    public function rejected(): static
    {
        return $this->completed()->state(fn (array $attributes) => [
            'status' => 'rejected',
            'rejected_at' => now(),
            'approved_at' => null,
            'approved_by' => null,
        ]);
    }

    public function completed(): static
    {
        return $this->state(fn (array $attributes) => [
            'title' => 'Yoga studio',
            'website_url' => 'https://yoga.example.com',
            'purpose' => 'Leads Page',
            'status' => 'approved',
            'approved_at' => now(),
            'html' => '<section><h1>Yoga studio</h1></section>',
            'css' => 'body { margin: 0; }',
            'js' => '',
        ]);
    }

    public function appDownload(): static
    {
        return $this->state(fn (): array => [
            'purpose' => PromptLandingPage::PURPOSE_APP_DOWNLOAD,
            'html' => '<section><h1>Yoga studio</h1><a href="https://apps.apple.com/app/yoga">Download the app</a></section>',
        ]);
    }
}
