<?php

namespace Tests\Feature\Tenant;

use App\Domains\Attachable\Models\Attachment;
use App\Domains\Tenant\Models\WebsiteType;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;

class BootstrapScannerControllerTest extends TestCase
{
    use RefreshDatabase;

    public function test_it_publicly_bootstraps_the_scanner_by_scanner_domain(): void
    {
        $siteLogo = Attachment::factory()->create();
        $favicon = Attachment::factory()->create();

        WebsiteType::query()->create([
            'codigo' => 'shopit',
            'nombre' => 'ShopIt',
            'dominio' => 'admin.shopit.test',
            'scanner_domain' => 'scanner.shopit.test',
            'primary_color' => '#112233',
            'secondary_color' => '#445566',
            'danger_color' => '#aa0000',
            'success_color' => '#00aa00',
            'warning_color' => '#ffaa00',
            'body_color' => '#666666',
            'darker_body_color' => '#333333',
            'surface_color' => '#ffffff',
            'background_color' => '#f8f8f8',
            'border_color' => '#eaeaea',
            'login_header_footer_color' => '#313131',
            'site_logo' => $siteLogo->id,
            'favicon_id' => $favicon->id,
        ]);

        $this->getJson('/api/v1/scanner/bootstrap/SCANNER.SHOPIT.TEST')
            ->assertOk()
            ->assertJsonPath('data.website_type_code', 'shopit')
            ->assertJsonPath('data.primary_color', '#112233')
            ->assertJsonPath('data.site_logo', $siteLogo->getTemporaryUrl(1440))
            ->assertJsonPath('data.footer_logo', null)
            ->assertJsonPath('data.favicon', $favicon->getTemporaryUrl(1440))
            ->assertJsonMissingPath('data.codigo')
            ->assertJsonMissingPath('data.nombre')
            ->assertJsonMissingPath('data.dominio')
            ->assertJsonMissingPath('data.scanner_domain');
    }

    public function test_it_does_not_match_the_admin_app_domain(): void
    {
        WebsiteType::query()->create([
            'codigo' => 'shopit',
            'nombre' => 'ShopIt',
            'dominio' => 'admin.shopit.test',
            'scanner_domain' => 'scanner.shopit.test',
        ]);

        $this->getJson('/api/v1/scanner/bootstrap/admin.shopit.test')
            ->assertNotFound();
    }

    public function test_it_returns_not_found_for_an_unknown_scanner_domain(): void
    {
        $this->getJson('/api/v1/scanner/bootstrap/unknown.test')
            ->assertNotFound();
    }

    public function test_it_rejects_an_invalid_domain(): void
    {
        $invalidDomain = str_repeat('a', 256);

        $this->getJson("/api/v1/scanner/bootstrap/{$invalidDomain}")
            ->assertUnprocessable()
            ->assertJsonValidationErrors(['dominio']);
    }
}
