<?php

namespace Tests\Feature;

use App\Agent\Tools\Campaign\ChooseTikTokIdentity;
use App\Agent\Workspace;
use App\Models\Campaign;
use App\Models\TikTokConnection;
use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\Http;
use Laravel\Ai\Tools\Request;
use Tests\TestCase;

class ChooseTikTokIdentityTest extends TestCase
{
    use RefreshDatabase;

    public function test_shared_tiktok_flow_auto_selects_one_authorized_identity(): void
    {
        $user = User::factory()->create();
        $this->actingAs($user);
        TikTokConnection::factory()->for($user)->create(['advertiser_id' => 'advertiser-1']);
        $campaign = Campaign::create([
            'user_id' => $user->id,
            'name' => 'TikTok campaign',
            'platform' => 'tiktok',
            'status' => 'draft',
            'ad_account_id' => 'advertiser-1',
        ]);

        $workspace = app(Workspace::class);
        $workspace->bindTo('tiktok-identity-choice');
        $workspace->ownedBy($user);
        $workspace->produced($campaign);

        Http::fake([
            'business-api.tiktok.com/open_api/v1.3/identity/get/*' => Http::response([
                'code' => 0,
                'data' => ['identity_list' => [[
                    'identity_id' => 'identity-1',
                    'identity_type' => 'CUSTOMIZED_USER',
                    'display_name' => 'AOLL Brand',
                    'identity_authorized_bc_id' => null,
                ]]],
            ]),
        ]);

        $payload = json_decode((string) app(ChooseTikTokIdentity::class)->handle(new Request), true);

        $this->assertTrue($payload['ok']);
        $this->assertTrue($payload['auto_selected']);
        $this->assertSame('identity-1', $campaign->fresh()->meta['tiktok_identity_id']);
        $this->assertSame('CUSTOMIZED_USER', TikTokConnection::first()->identity_type);
    }
}