<?php

namespace App\Campaigns;

use App\Models\AllowedPage;
use App\Models\Campaign;

class AdPreview
{
    /** @return list<array{platform: string, name: string, icon: string}> */
    public function identities(?Campaign $campaign): array
    {
        if ($campaign === null || $campaign->platform !== 'meta') {
            return [];
        }

        $page = $campaign->meta['facebook_page'] ?? [];
        $pageName = (string) ($page['id'] ?? '') === (string) $campaign->page_id
            ? trim((string) ($page['name'] ?? ''))
            : '';

        if ($pageName === '' && filled($campaign->page_id)) {
            $pageName = (string) AllowedPage::query()->forPlatform('facebook')
                ->where('page_id', $campaign->page_id)->value('name');
        }

        $pageName = $pageName ?: ($campaign->page_id ? 'Facebook Page '.$campaign->page_id : 'Facebook Page not selected');
        $placements = $campaign->placements ?: ['facebook'];
        $identities = [];

        if (array_diff($placements, ['instagram']) !== []) {
            $identities[] = ['platform' => 'Facebook', 'name' => $pageName, 'icon' => 'facebook'];
        }

        if (in_array('instagram', $placements, true)) {
            $account = $campaign->meta['instagram_account'] ?? [];
            $username = (string) ($account['id'] ?? '') === (string) $campaign->instagram_account_id
                ? trim((string) ($account['username'] ?? ''))
                : '';

            $name = match (true) {
                filled($campaign->instagram_account_id) => $username !== ''
                    ? '@'.ltrim($username, '@')
                    : 'Instagram '.$campaign->instagram_account_id,
                $campaign->instagram_account_id === '' => $pageName,
                default => 'Instagram identity not selected',
            };

            $identities[] = ['platform' => 'Instagram', 'name' => $name, 'icon' => 'instagram'];
        }

        return $identities;
    }
}
