<?php

declare(strict_types=1);

namespace ShlinkioTest\Shlink\Core\Entity;

use PHPUnit\Framework\TestCase;
use Shlinkio\Shlink\Core\Entity\VisitLocation;
use Shlinkio\Shlink\IpGeolocation\Model\Location;

class VisitLocationTest extends TestCase
{
    /** @test */
    public function valuesFoundWhenExchangingArrayAreCastToString(): void
    {
        $payload = new Location('', '', '', '', 1000.7, -2000.4, '');
        $location = new VisitLocation($payload);

        $this->assertSame('1000.7', $location->getLatitude());
        $this->assertSame('-2000.4', $location->getLongitude());
    }

    /**
     * @test
     * @dataProvider provideArgs
     */
    public function isEmptyReturnsTrueWhenAllValuesAreEmpty(array $args, bool $isEmpty): void
    {
        $payload = new Location(...$args);
        $location = new VisitLocation($payload);

        $this->assertEquals($isEmpty, $location->isEmpty());
    }

    public function provideArgs(): iterable
    {
        yield [['', '', '', '', 0.0, 0.0, ''], true];
        yield [['', '', '', '', 0.0, 0.0, 'dd'], false];
        yield [['', '', '', 'dd', 0.0, 0.0, ''], false];
        yield [['', '', 'dd', '', 0.0, 0.0, ''], false];
        yield [['', 'dd', '', '', 0.0, 0.0, ''], false];
        yield [['dd', '', '', '', 0.0, 0.0, ''], false];
        yield [['', '', '', '', 1.0, 0.0, ''], false];
        yield [['', '', '', '', 0.0, 1.0, ''], false];
    }
}