<?php

namespace App\Mcp\Tools\Performance;

use App\Campaigns\WhaleAdopsReader;
use Illuminate\Contracts\JsonSchema\JsonSchema;
use Laravel\Mcp\Request;
use Laravel\Mcp\Response;
use Laravel\Mcp\Server\Attributes\Description;
use Laravel\Mcp\Server\Attributes\Name;
use Laravel\Mcp\Server\Tool;

#[Name('find_campaign')]
#[Description('Find advertising campaigns in Whale arb_adops tables by campaign id or name. Meta is live; Google and LinkedIn are not ingested yet.')]
class FindCampaign extends Tool
{
    public function __construct(private readonly WhaleAdopsReader $adops) {}

    public function schema(JsonSchema $schema): array
    {
        return [
            'query' => $schema->string()
                ->description('Platform campaign id or a name fragment from arb_adops tables.')
                ->required(),
            'platform' => $schema->string()
                ->description('meta, google, or linkedin. Defaults to meta.'),
        ];
    }

    public function handle(Request $request): Response
    {
        if (! $this->adops->isAvailable()) {
            return Response::error('Whale adops tables are not available.');
        }

        $query = trim((string) $request->get('query', ''));
        $platform = strtolower(trim((string) $request->get('platform', 'meta'))) ?: 'meta';

        if ($query === '') {
            return Response::error('query is required.');
        }

        if ($platform !== 'meta') {
            return Response::text(json_encode([
                'ok' => false,
                'platform' => $platform,
                'message' => 'Only Meta campaign data is in Whale so far. Google and LinkedIn ingest is not ready.',
                'campaigns' => [],
            ], JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE));
        }

        $campaigns = $this->adops->campaigns($platform, null, $query, 25);

        return Response::text(json_encode([
            'ok' => true,
            'platform' => $platform,
            'query' => $query,
            'campaigns' => $campaigns,
        ], JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE));
    }
}
