<?php

namespace Database\Factories;

use App\Enums\PlanTier;
use App\Models\Plan;
use Illuminate\Database\Eloquent\Factories\Factory;

/**
 * @extends Factory<Plan>
 */
class PlanFactory extends Factory
{
    private static array $defaultFeatures = [
        'fuel_types' => ['max' => 1],
        'email' => ['enabled' => false, 'frequency' => 'weekly_digest'],
        'push' => ['enabled' => false, 'frequency' => 'none'],
        'whatsapp' => ['enabled' => false, 'daily_limit' => 0, 'scheduled_updates' => 0],
        'sms' => ['enabled' => false, 'daily_limit' => 0],
        'ai_predictions' => false,
        'price_threshold' => false,
        'score_alerts' => false,
    ];

    public function definition(): array
    {
        return [
            'name' => PlanTier::Free->value,
            'stripe_price_id' => null,
            'features' => self::$defaultFeatures,
            'active' => true,
        ];
    }

    public function free(): static
    {
        return $this->state(fn () => [
            'name' => PlanTier::Free->value,
            'stripe_price_id' => null,
            'features' => self::$defaultFeatures,
        ]);
    }

    public function basic(): static
    {
        return $this->state(fn () => [
            'name' => PlanTier::Basic->value,
            'stripe_price_id' => 'price_basic_test',
            'features' => [
                'fuel_types' => ['max' => 1],
                'email' => ['enabled' => true, 'frequency' => 'daily'],
                'push' => ['enabled' => true, 'frequency' => 'daily'],
                'whatsapp' => ['enabled' => true, 'daily_limit' => 5, 'scheduled_updates' => 2],
                'sms' => ['enabled' => false, 'daily_limit' => 0],
                'ai_predictions' => false,
                'price_threshold' => true,
                'score_alerts' => true,
            ],
        ]);
    }

    public function plus(): static
    {
        return $this->state(fn () => [
            'name' => PlanTier::Plus->value,
            'stripe_price_id' => 'price_plus_test',
            'features' => [
                'fuel_types' => ['max' => 1],
                'email' => ['enabled' => true, 'frequency' => 'triggered'],
                'push' => ['enabled' => true, 'frequency' => 'triggered'],
                'whatsapp' => ['enabled' => true, 'daily_limit' => 5, 'scheduled_updates' => 2],
                'sms' => ['enabled' => true, 'daily_limit' => 1],
                'ai_predictions' => true,
                'price_threshold' => true,
                'score_alerts' => true,
            ],
        ]);
    }

    public function pro(): static
    {
        return $this->state(fn () => [
            'name' => PlanTier::Pro->value,
            'stripe_price_id' => 'price_pro_test',
            'features' => [
                'fuel_types' => ['max' => null],
                'email' => ['enabled' => true, 'frequency' => 'triggered'],
                'push' => ['enabled' => true, 'frequency' => 'triggered'],
                'whatsapp' => ['enabled' => true, 'daily_limit' => 5, 'scheduled_updates' => 2],
                'sms' => ['enabled' => true, 'daily_limit' => 3],
                'ai_predictions' => true,
                'price_threshold' => true,
                'score_alerts' => true,
            ],
        ]);
    }
}
