<?php

namespace Tests\Feature\Tenant;

use App\Models\Event;

class LiveShowLinkControllerTest extends TenantTestCase
{
    public function test_live_show_link_response_includes_qr_code_and_url(): void
    {
        $event = Event::factory()
            ->for($this->tenant)
            ->create([
                'name' => ['de' => 'Live-Show Test', 'en' => 'Live Show Test'],
                'slug' => 'live-show-link-test',
            ]);

        $response = $this->authenticatedRequest('GET', "/api/v1/tenant/events/{$event->slug}/live-show/link");

        $response->assertOk();

        $data = $response->json('data');

        $this->assertIsArray($data);
        $this->assertArrayHasKey('token', $data);
        $this->assertArrayHasKey('url', $data);
        $this->assertArrayHasKey('qr_code_data_url', $data);
        $this->assertArrayHasKey('rotated_at', $data);

        $this->assertIsString($data['token']);
        $this->assertIsString($data['url']);
        $this->assertIsString($data['qr_code_data_url']);
        $this->assertStringStartsWith('data:image/png;base64,', $data['qr_code_data_url']);
        $this->assertNotNull($data['rotated_at']);

        $expectedBase = rtrim((string) config('app.url'), '/');
        $this->assertSame("{$expectedBase}/show/{$data['token']}", $data['url']);
    }

    public function test_rotate_live_show_link_changes_token(): void
    {
        $event = Event::factory()
            ->for($this->tenant)
            ->create([
                'name' => ['de' => 'Live-Show Rotation', 'en' => 'Live Show Rotation'],
                'slug' => 'live-show-rotate-test',
            ]);

        $first = $this->authenticatedRequest('GET', "/api/v1/tenant/events/{$event->slug}/live-show/link");
        $first->assertOk();
        $firstToken = $first->json('data.token');

        $rotated = $this->authenticatedRequest('POST', "/api/v1/tenant/events/{$event->slug}/live-show/link/rotate");
        $rotated->assertOk();

        $rotatedToken = $rotated->json('data.token');
        $this->assertIsString($rotatedToken);
        $this->assertNotSame($firstToken, $rotatedToken);
    }
}
