<?php

namespace Tests\Feature;

use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;

final class BookmarkletControllerTest extends TestCase
{
    use RefreshDatabase;

    public function test_bookmarklet_endpoint_returns_200_with_text_javascript_content_type(): void
    {
        $response = $this->get('/bookmarklets/ccli-import.js');

        $response->assertStatus(200);
        $response->assertHeader('Content-Type', 'text/javascript; charset=utf-8');
    }

    public function test_bookmarklet_response_starts_with_javascript_prefix(): void
    {
        $response = $this->get('/bookmarklets/ccli-import.js');

        expect($response->getContent())->toStartWith('javascript:');
    }

    public function test_bookmarklet_response_is_a_single_line_with_no_actual_newlines(): void
    {
        $response = $this->get('/bookmarklets/ccli-import.js');
        $content = (string) $response->getContent();

        expect(substr_count($content, "\n"))->toBe(0);
    }

    public function test_bookmarklet_response_contains_app_url_and_import_path(): void
    {
        $response = $this->get('/bookmarklets/ccli-import.js');
        $content = $response->getContent();

        expect($content)->toContain('import-from-ccli-paste');
        expect($content)->toContain('songselect.ccli.com');
        expect($content)->toContain('btoa');
    }

    public function test_bookmarklet_response_uses_request_host_instead_of_configured_app_url(): void
    {
        config(['app.url' => 'http://pp-planer.test']);

        $response = $this
            ->withServerVariables(['HTTP_HOST' => 'pp-planer.ddev.site', 'HTTPS' => 'on'])
            ->get('/bookmarklets/ccli-import.js');
        $content = $response->getContent();

        expect($content)->toContain('pp-planer.ddev.site')
            ->not->toContain('pp-planer.test');
    }

    public function test_bookmarklet_endpoint_does_not_require_authentication(): void
    {
        $response = $this->get('/bookmarklets/ccli-import.js');

        $response->assertStatus(200);
        $response->assertHeader('Content-Type', 'text/javascript; charset=utf-8');
    }
}
