<?php

namespace App\Entities\Pessoa;

use App\Entities\Endereco\Endereco;
use App\Entities\Perfil\Perfil;
use App\Entities\Usuario\Usuario;
use App\Utils\Builder;
use Exception;

class PessoaBuilder implements Builder {
	public $id;
	public $telefone_1;
	public $telefone_2;
	public $telefone_3;
	public $id_endereco;
	public $id_tipo_pessoa;
	public $adicionado_por;
	public $alterado_por;
	public $criado_em;
	public $alterado_em;
	public $observacao;

	public function setId(int $id): PessoaBuilder {

		$this->id = $id;
		return $this;

	}

	public function setTelefone1(string $telefone_1): PessoaBuilder {

		$this->telefone_1 = $telefone_1;
		return $this;

	}

	public function setTelefone2(string $telefone_2): PessoaBuilder {

		$this->telefone_2 = $telefone_2;
		return $this;

	}

	public function setTelefone3(string $telefone_3): PessoaBuilder {

		$this->telefone_3 = $telefone_3;
		return $this;

	}

	public function setIdEndereco(int $id_endereco): PessoaBuilder {

		$this->id_endereco = $id_endereco;
		return $this;

	}

	public function setIdTipoPessoa(int $id_tipo_pessoa): PessoaBuilder {

		$this->id_tipo_pessoa = $id_tipo_pessoa;
		return $this;

	}

	public function setAdicionadoPor(?int $adicionado_por): PessoaBuilder {

		$this->adicionado_por = $adicionado_por;
		return $this;

	}

	public function setAlteradoPor(?int $alterado_por): PessoaBuilder {

		$this->alterado_por = $alterado_por;
		return $this;

	}

	public function setCriadoEm(?string $criado_em): PessoaBuilder {

		$this->criado_em = $criado_em;
		return $this;

	}

	public function setAlteradoEm(?string $alterado_em): PessoaBuilder {

		$this->alterado_em = $alterado_em;
		return $this;

	}

	public function setObservacao($observacao) {

		$this->observacao = $observacao;
		return $this;

	}

	public function build() {

		$pessoa = new Pessoa();
		if (isset( $this->id )) {
			$pessoa->setId( $this->id );
		}
		if (isset( $this->telefone_1 )) {
			$pessoa->setTelefone1( $this->telefone_1 );
		}
		if (isset( $this->telefone_2 )) {
			$pessoa->setTelefone2( $this->telefone_2 );
		}
		if (isset( $this->telefone_3 )) {
			$pessoa->setTelefone3( $this->telefone_3 );
		}
		if (isset( $this->id_endereco )) {
			$pessoa->setIdEndereco( $this->id_endereco );
		}
		if (isset( $this->id_tipo_pessoa )) {
			$pessoa->setIdTipoPessoa( $this->id_tipo_pessoa );
		}
		if (isset( $this->adicionado_por )) {
			$pessoa->setAdicionadoPor( $this->adicionado_por );
		}
		if (isset( $this->alterado_por )) {
			$pessoa->setAlteradoPor( $this->alterado_por );
		}
		if (isset( $this->criado_em )) {
			$pessoa->setCriadoEm( $this->criado_em );
		}
		if (isset( $this->alterado_em )) {
			$pessoa->setAlteradoEm( $this->alterado_em );
		}
		if (isset( $this->observacao )) {
			$pessoa->setObservacao( $this->observacao );
		}
		return $pessoa;

	}

}
