<?php

namespace App\Campaigns\Platforms;

use App\Models\Campaign;

/**
 * A platform we can hold a campaign for but cannot publish to yet.
 *
 * Everything shared still applies, so a campaign for it is validated normally
 * and refused at the last step rather than half built. Naming the platform in
 * the refusal matters: "TikTok is not connected yet" is actionable, a generic
 * failure is not.
 */
abstract class UnsupportedPlatformRules implements PlatformRules
{
    public function objectives(): array
    {
        return ['OUTCOME_SALES', 'OUTCOME_LEADS', 'OUTCOME_TRAFFIC'];
    }

    public function bidStrategies(): array
    {
        return ['LOWEST_COST_WITHOUT_CAP', 'COST_CAP'];
    }

    public function placements(): array
    {
        return [];
    }

    public function callsToAction(): array
    {
        return ['SHOP_NOW', 'LEARN_MORE', 'SIGN_UP'];
    }

    public function minimumDailyBudget(): float
    {
        return 5.00;
    }

    public function optimizationGoal(string $objective): ?string
    {
        return null;
    }

    public function conversionEvent(string $objective): ?string
    {
        return null;
    }

    public function requiresPixel(string $objective): bool
    {
        return false;
    }

    /** @return list<string> */
    public function additionalProblems(Campaign $campaign): array
    {
        return [$this->name().' is not connected yet, so this campaign cannot be published'];
    }

    /** @return list<string> */
    public function editableAfterPublish(): array
    {
        return [];
    }
}
