<?php

declare(strict_types=1);

namespace ShlinkioCliTest\Shlink\CLI\Command;

use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\Attributes\Test;
use Shlinkio\Shlink\CLI\Command\ShortUrl\ListShortUrlsCommand;
use Shlinkio\Shlink\TestUtils\CliTest\CliTestCase;

class ListShortUrlsTest extends CliTestCase
{
    #[Test, DataProvider('provideFlagsAndOutput')]
    public function generatesExpectedOutput(array $flags, string $expectedOutput): void
    {
        [$output] = $this->exec([ListShortUrlsCommand::NAME, ...$flags], ['no']);
        self::assertStringContainsString($expectedOutput, $output);
    }

    public static function provideFlagsAndOutput(): iterable
    {
        // phpcs:disable Generic.Files.LineLength
        yield 'no flags' => [[], <<<OUTPUT
            +--------------------+---------------+-------------------------------------------+-----------------------------------------------------------------------------------------------------------+---------------------------+--------------+
            | Short Code         | Title         | Short URL                                 | Long URL                                                                                                  | Date created              | Visits count |
            +--------------------+---------------+-------------------------------------------+-----------------------------------------------------------------------------------------------------------+---------------------------+--------------+
            | ghi789             |               | http://example.com/ghi789                 | https://blog.alejandrocelaya.com/2019/04/27/considerations-to-properly-use-open-source-software-projects/ | 2019-01-01T00:00:30+00:00 | 0            |
            | custom             |               | http://s.test/custom                      | https://shlink.io                                                                                         | 2019-01-01T00:00:20+00:00 | 0            |
            | def456             |               | http://s.test/def456                      | https://blog.alejandrocelaya.com/2017/12/09/acmailer-7-0-the-most-important-release-in-a-long-time/       | 2019-01-01T00:00:10+00:00 | 2            |
            | custom-with-domain |               | http://some-domain.com/custom-with-domain | https://google.com                                                                                        | 2018-10-20T00:00:00+00:00 | 0            |
            | abc123             | My cool title | http://s.test/abc123                      | https://shlink.io                                                                                         | 2018-05-01T00:00:00+00:00 | 3            |
            | ghi789             |               | http://s.test/ghi789                      | https://shlink.io/documentation/                                                                          | 2018-05-01T00:00:00+00:00 | 2            |
            +--------------------+---------------+-------------------------------------------+---------------------------- Page 1 of 1 ------------------------------------------------------------------+---------------------------+--------------+
            OUTPUT];
        yield 'start date' => [['--start-date=2019-01'], <<<OUTPUT
            +------------+-------+---------------------------+-----------------------------------------------------------------------------------------------------------+---------------------------+--------------+
            | Short Code | Title | Short URL                 | Long URL                                                                                                  | Date created              | Visits count |
            +------------+-------+---------------------------+-----------------------------------------------------------------------------------------------------------+---------------------------+--------------+
            | ghi789     |       | http://example.com/ghi789 | https://blog.alejandrocelaya.com/2019/04/27/considerations-to-properly-use-open-source-software-projects/ | 2019-01-01T00:00:30+00:00 | 0            |
            | custom     |       | http://s.test/custom      | https://shlink.io                                                                                         | 2019-01-01T00:00:20+00:00 | 0            |
            | def456     |       | http://s.test/def456      | https://blog.alejandrocelaya.com/2017/12/09/acmailer-7-0-the-most-important-release-in-a-long-time/       | 2019-01-01T00:00:10+00:00 | 2            |
            +------------+-------+---------------------------+-------------------------------------------- Page 1 of 1 --------------------------------------------------+---------------------------+--------------+
            OUTPUT];
        yield 'end date' => [['-e 2018-12-01'], <<<OUTPUT
            +--------------------+---------------+-------------------------------------------+----------------------------------+---------------------------+--------------+
            | Short Code         | Title         | Short URL                                 | Long URL                         | Date created              | Visits count |
            +--------------------+---------------+-------------------------------------------+----------------------------------+---------------------------+--------------+
            | custom-with-domain |               | http://some-domain.com/custom-with-domain | https://google.com               | 2018-10-20T00:00:00+00:00 | 0            |
            | abc123             | My cool title | http://s.test/abc123                      | https://shlink.io                | 2018-05-01T00:00:00+00:00 | 3            |
            | ghi789             |               | http://s.test/ghi789                      | https://shlink.io/documentation/ | 2018-05-01T00:00:00+00:00 | 2            |
            +--------------------+---------------+----------------------------------- Page 1 of 1 ------------------------------+---------------------------+--------------+
            OUTPUT];
        yield 'start and end date' => [['-s 2018-06-20', '--end-date=2019-01-01T00:00:20+00:00'], <<<OUTPUT
            +--------------------+-------+-------------------------------------------+-----------------------------------------------------------------------------------------------------+---------------------------+--------------+
            | Short Code         | Title | Short URL                                 | Long URL                                                                                            | Date created              | Visits count |
            +--------------------+-------+-------------------------------------------+-----------------------------------------------------------------------------------------------------+---------------------------+--------------+
            | custom             |       | http://s.test/custom                      | https://shlink.io                                                                                   | 2019-01-01T00:00:20+00:00 | 0            |
            | def456             |       | http://s.test/def456                      | https://blog.alejandrocelaya.com/2017/12/09/acmailer-7-0-the-most-important-release-in-a-long-time/ | 2019-01-01T00:00:10+00:00 | 2            |
            | custom-with-domain |       | http://some-domain.com/custom-with-domain | https://google.com                                                                                  | 2018-10-20T00:00:00+00:00 | 0            |
            +--------------------+-------+-------------------------------------------+----------------------------- Page 1 of 1 -----------------------------------------------------------+---------------------------+--------------+
            OUTPUT];
        yield 'expired excluded' => [['--exclude-max-visits-reached', '--exclude-past-valid-until'], <<<OUTPUT
            +--------------------+-------+-------------------------------------------+-----------------------------------------------------------------------------------------------------------+---------------------------+--------------+
            | Short Code         | Title | Short URL                                 | Long URL                                                                                                  | Date created              | Visits count |
            +--------------------+-------+-------------------------------------------+-----------------------------------------------------------------------------------------------------------+---------------------------+--------------+
            | ghi789             |       | http://example.com/ghi789                 | https://blog.alejandrocelaya.com/2019/04/27/considerations-to-properly-use-open-source-software-projects/ | 2019-01-01T00:00:30+00:00 | 0            |
            | custom             |       | http://s.test/custom                      | https://shlink.io                                                                                         | 2019-01-01T00:00:20+00:00 | 0            |
            | def456             |       | http://s.test/def456                      | https://blog.alejandrocelaya.com/2017/12/09/acmailer-7-0-the-most-important-release-in-a-long-time/       | 2019-01-01T00:00:10+00:00 | 2            |
            | custom-with-domain |       | http://some-domain.com/custom-with-domain | https://google.com                                                                                        | 2018-10-20T00:00:00+00:00 | 0            |
            +--------------------+-------+-------------------------------------------+-------------------------------- Page 1 of 1 --------------------------------------------------------------+---------------------------+--------------+
            OUTPUT];
        // phpcs:enable
    }
}