<?php
namespace Fifa\ConnectId\Sdk\Util\Builder\Person;

use DateTime;
use Fifa\ConnectId\Sdk\Model\PersonName;
use Fifa\ConnectId\Sdk\Model\PersonData;

/**
 * Interface PersonBuilderInterface
 * @package Fifa\ConnectId\Sdk\Util\Builder\Person
 */
interface PersonBuilderInterface
{
    /**
     * Gets person data
     *
     * @return PersonData
     */
    public function getPersonData(): PersonData;
    
    /**
     * Sets date of birth
     *
     * @param DateTime $dateOfBirth
     * @return PersonBuilderInterface
     */
    public function setDateOfBirth(DateTime $dateOfBirth): PersonBuilderInterface;

    /**
     * Sets person gender
     *
     * @param string $gender
     * @return PersonBuilderInterface
     */
    public function setGender(string $gender): PersonBuilderInterface;

    /**
     * Adds a name to a person as two strings ($firstName and $lastName)
     *
     * @param string|null $lastName
     * @param string $firstName
     * @return PersonBuilderInterface
     */
    public function addName(string $firstName, string $lastName = null): PersonBuilderInterface;

    /**
     * Adds a name to a person by giving PersonName instance
     *
     * @param PersonName $personName
     * @return PersonBuilderInterface
     */
    public function addPersonName(PersonName $personName): PersonBuilderInterface;

    /**
     * Adds player registration to a person
     *
     * @param string $level
     * @param string $discipline
     * @param string $status
     * @param string $organisationFifaId
     * @param string|null $registrationNature
     * @return PersonBuilderInterface
     */
    public function addPlayerRegistration(string $level, string $discipline, string $status, string $organisationFifaId, string $registrationNature = null): PersonBuilderInterface;

    /**
     * Adds match official registration to a person
     *
     * @param string $matchOfficialRole
     * @param string $discipline
     * @param string $status
     * @param string $organisationFifaId
     * @return PersonBuilderInterface
     */
    public function addMatchOfficialRegistration(string $matchOfficialRole, string $discipline, string $status, string $organisationFifaId): PersonBuilderInterface;

    /**
     * Adds team official registration to a person
     *
     * @param string $teamOfficialRole
     * @param string $discipline
     * @param string $status
     * @param string $organisationFifaId
     * @return PersonBuilderInterface
     */
    public function addTeamOfficialRegistration(string $teamOfficialRole, string $discipline, string $status, string $organisationFifaId): PersonBuilderInterface;

    /**
     * Adds organisation official registration to a person
     *
     * @param string $organisationOfficialRole
     * @param string $status
     * @param string $organisationFifaId
     * @return PersonBuilderInterface
     */
    public function addOrganisationOfficialRegistration(string $organisationOfficialRole, string $status, string $organisationFifaId): PersonBuilderInterface;
}