<?php

namespace Blackbirdchess\Tests\Service\Import\Readers;

use Blackbirdchess\Service\Import\Readers\Swar5;
use Blackbirdchess\Service\Results\Enums\Title;
use Blackbirdchess\Service\Results\Player;
use PHPUnit\Framework\TestCase;

class Swar5Test extends TestCase
{
    private string $testfile = '/res/Swar5-testfile.swar';
    private Swar5 $testobject;

    public function setUp(): void
    {
        $root = NULL;
        $directory = dirname(__FILE__);
        do {
            $directory = dirname($directory);
            $composer = $directory . '/composer.json';
            if(file_exists($composer)) $root = $directory;
        } while(is_null($root) && $directory != '/');

        $this->testfile = $directory . $this->testfile;
        $this->testobject = new Swar5();
        $this->testobject->read($this->testfile);
    }

    public function testReadTournamentName(): void
    {
        $this->assertEquals('Blackbird Chess Unit Test Tournament', $this->testobject->Tournament->Name);
    }

    public function testReadTournamentOrganiser(): void
    {
        $this->assertEquals('Blackbird Chess Developers', $this->testobject->Tournament->Organiser);
    }

    public function testReadTournamentLocation(): void
    {
        $this->assertEquals('Waregem', $this->testobject->Tournament->OrganiserPlace);
    }

    public function testHas8Players(): void
    {
        $this->assertCount(8, $this->testobject->Tournament->Players);
    }

    public function testHas7Rounds(): void
    {
        $this->assertCount(7, $this->testobject->Tournament->Rounds);
    }

    public function testPlayerHas7Pairings(): void
    {
        $this->assertCount(7, $this->testobject->Tournament->Players[0]->Pairings);
    }

    public function testPlayerHasTitle(): void
    {
        $player = Player::PlayersByName('Player 1', $this->testobject->Tournament)[0];
        $this->assertInstanceOf(Title::class, $player->Title);
    }

    public function testPlayerHasNoTitle(): void
    {
        $player = Player::PlayersByName('Player 3', $this->testobject->Tournament)[0];
        $this->assertNull($player->Title);
    }
}