<?php

namespace Tests\Feature;

use App\Mcp\Servers\CampaignPerformanceServer;
use App\Mcp\Tools\Performance\CampaignHealth;
use App\Mcp\Tools\Performance\FindCampaign;
use App\Mcp\Tools\Performance\PortfolioSummary;
use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\DB;
use Tests\Concerns\CreatesAdopsWhaleTables;
use Tests\TestCase;

class CampaignPerformanceMcpTest extends TestCase
{
    use CreatesAdopsWhaleTables;
    use RefreshDatabase;

    public function test_find_campaign_returns_matching_whale_rows(): void
    {
        $this->travelTo('2026-09-22 12:00:00');
        $this->createAdopsWhaleTables();
        $this->insertCampaign();

        $response = CampaignPerformanceServer::tool(FindCampaign::class, [
            'query' => 'Italy',
        ]);

        $response->assertOk();
        $response->assertSee('Italy packages');
        $response->assertSee('1201');
    }

    public function test_campaign_health_returns_a_verdict_without_calling_platforms(): void
    {
        $this->travelTo('2026-09-22 12:00:00');
        config(['campaign-performance.llm_enabled' => false]);
        $this->createAdopsWhaleTables();
        User::factory()->create();
        $this->insertCampaign();

        $response = CampaignPerformanceServer::tool(CampaignHealth::class, [
            'campaign_id' => '1201',
            'platform' => 'meta',
        ]);

        $response->assertOk();
        $response->assertSee('Italy packages');
        $response->assertSee('revenue_included');
        $response->assertSee('false');
        $response->assertSee('verdict');
    }

    public function test_portfolio_summary_explains_when_analysis_has_not_run(): void
    {
        $this->createAdopsWhaleTables();

        $response = CampaignPerformanceServer::tool(PortfolioSummary::class, []);

        $response->assertOk();
        $response->assertSee('No hourly analysis yet');
    }

    public function test_google_find_does_not_pretend_ingest_exists(): void
    {
        $this->createAdopsWhaleTables();

        $response = CampaignPerformanceServer::tool(FindCampaign::class, [
            'query' => 'Italy',
            'platform' => 'google',
        ]);

        $response->assertOk();
        $response->assertSee('not ready');
    }

    private function insertCampaign(): void
    {
        $this->seedAdopsCampaignMeta('1201', 'Italy packages');
        DB::connection('whale')->table('arb_adops_stats_campaign_daily')->insert([
            'platform' => 'meta',
            'account_id' => 'act_111',
            'campaign_id' => '1201',
            'stat_date' => now()->toDateString(),
            'spend' => 12.10,
            'impressions' => 400,
            'clicks' => 10,
        ]);
    }
}
