<?php

declare(strict_types=1);

namespace ShlinkioApiTest\Shlink\Rest\Action;

use Shlinkio\Shlink\TestUtils\ApiTest\ApiTestCase;

class ListDomainsTest extends ApiTestCase
{
    /**
     * @test
     * @dataProvider provideApiKeysAndDomains
     */
    public function domainsAreProperlyListed(string $apiKey, array $expectedDomains): void
    {
        $resp = $this->callApiWithKey(self::METHOD_GET, '/domains', [], $apiKey);
        $respPayload = $this->getJsonResponsePayload($resp);

        self::assertEquals(self::STATUS_OK, $resp->getStatusCode());
        self::assertEquals([
            'domains' => [
                'data' => $expectedDomains,
                'defaultRedirects' => [
                    'baseUrlRedirect' => null,
                    'regular404Redirect' => null,
                    'invalidShortUrlRedirect' => null,
                ],
            ],
        ], $respPayload);
    }

    public function provideApiKeysAndDomains(): iterable
    {
        yield 'admin API key' => ['valid_api_key', [
            [
                'domain' => 'doma.in',
                'isDefault' => true,
                'redirects' => [
                    'baseUrlRedirect' => null,
                    'regular404Redirect' => null,
                    'invalidShortUrlRedirect' => null,
                ],
            ],
            [
                'domain' => 'detached-with-redirects.com',
                'isDefault' => false,
                'redirects' => [
                    'baseUrlRedirect' => 'foo.com',
                    'regular404Redirect' => 'bar.com',
                    'invalidShortUrlRedirect' => null,
                ],
            ],
            [
                'domain' => 'example.com',
                'isDefault' => false,
                'redirects' => [
                    'baseUrlRedirect' => null,
                    'regular404Redirect' => null,
                    'invalidShortUrlRedirect' => null,
                ],
            ],
            [
                'domain' => 'some-domain.com',
                'isDefault' => false,
                'redirects' => [
                    'baseUrlRedirect' => null,
                    'regular404Redirect' => null,
                    'invalidShortUrlRedirect' => null,
                ],
            ],
        ]];
        yield 'author API key' => ['author_api_key', [
            [
                'domain' => 'doma.in',
                'isDefault' => true,
                'redirects' => [
                    'baseUrlRedirect' => null,
                    'regular404Redirect' => null,
                    'invalidShortUrlRedirect' => null,
                ],
            ],
        ]];
        yield 'domain API key' => ['domain_api_key', [
            [
                'domain' => 'example.com',
                'isDefault' => false,
                'redirects' => [
                    'baseUrlRedirect' => null,
                    'regular404Redirect' => null,
                    'invalidShortUrlRedirect' => null,
                ],
            ],
        ]];
    }
}