<?php

namespace App\ViewModels\Dashboard\DashboardMedicoViewModel;

use App\Utils\Builder;
use App\Utils\ResponseException;

class DashboardMedicoViewModelBuilder implements Builder {
	protected $id_agendamento;
	protected $id_consulta;
	protected $tipo_procedimento;
	protected $id_requisicao;
	protected $procedimento;
	protected $nome;
	protected $telefone_1;
	protected $data;
	protected $hora_inicio;
	protected $hora_final;
	protected $atrasado;
	protected $id_tipo_procedimento;
	protected $id_procedimento;
	protected $paciente_id;
	protected $id_pet;
	protected $nome_pet;
	protected $id_cliente;
	protected $status_sala;

	public function build(): DashboardMedicoViewModel {

		$dashboard_medico_vm = new DashboardMedicoViewModel();
		$dashboard_medico_vm->setIdAgendamento( $this->id_agendamento );
		$dashboard_medico_vm->setIdConsulta( $this->id_consulta );
		$dashboard_medico_vm->setIdRequisicao( $this->id_requisicao );
		$dashboard_medico_vm->setTipoProcedimento( $this->tipo_procedimento );
		$dashboard_medico_vm->setProcedimento( $this->procedimento );
		$dashboard_medico_vm->setNome( $this->nome );
		$dashboard_medico_vm->setTelefone1( $this->telefone_1 );
		$dashboard_medico_vm->setData( $this->data );
		$dashboard_medico_vm->setHoraInicio( $this->hora_inicio );
		$dashboard_medico_vm->setHoraFinal( $this->hora_final );
		$dashboard_medico_vm->setAtrasado( $this->atrasado );
		$dashboard_medico_vm->setIdTipoProcedimento( $this->id_tipo_procedimento );
		$dashboard_medico_vm->setIdProcedimento( $this->id_procedimento );
		$dashboard_medico_vm->setPacienteId( $this->paciente_id );
		$dashboard_medico_vm->setIdPet( $this->id_pet );
		$dashboard_medico_vm->setNomePet( $this->nome_pet );
		$dashboard_medico_vm->setIdCliente( $this->id_cliente );
		$dashboard_medico_vm->setIdCliente( $this->id_cliente );
		$dashboard_medico_vm->setStatusSala( $this->status_sala );
        return $dashboard_medico_vm;

	}

    /**
     * @param mixed $status_sala
     * @return DashboardMedicoViewModelBuilder
     */
    public function setStatusSala($status_sala)
    {
        $this->status_sala = $status_sala;
        return $this;
    }

	public function setIdAgendamento(int $id_agendamento): DashboardMedicoViewModelBuilder {

		$this->id_agendamento = $id_agendamento;
		return $this;

	}

	public function setIdConsulta(?int $id_consulta): DashboardMedicoViewModelBuilder {

		$this->id_consulta = $id_consulta;
		return $this;

	}

	public function setIdRequisicao(?int $id_requisicao): DashboardMedicoViewModelBuilder {

		$this->id_requisicao = $id_requisicao;
		return $this;

	}

	public function setTipoProcedimento(string $tipo_procedimento): DashboardMedicoViewModelBuilder {

		$this->tipo_procedimento = $tipo_procedimento;
		return $this;

	}

	public function setProcedimento(string $procedimento): DashboardMedicoViewModelBuilder {

		$this->procedimento = $procedimento;
		return $this;

	}

	public function setNome(string $nome): DashboardMedicoViewModelBuilder {

		$this->nome = $nome;
		return $this;

	}

	public function setTelefone1(string $telefone_1): DashboardMedicoViewModelBuilder {

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

	}

	public function setData(string $data): DashboardMedicoViewModelBuilder {

		if (!preg_match( REGEX_DATE_US_PATTERN, $data )) {
			throw new ResponseException( [ 
				'hora_inicio' => 'data fora do padrão : ' . $data ], 'Erro durante a construção do objeto ' . __CLASS__ );
		}
		$this->data = $data;
		return $this;

	}

	public function setHoraInicio(string $hora_inicio): DashboardMedicoViewModelBuilder {

		if (!preg_match( REGEX_HORARIO, $hora_inicio )) {
			throw new ResponseException( [ 
				'hora_inicio' => 'hora_inicio fora do padrão : ' . $hora_inicio ], 'Erro durante a construção do objeto ' . __CLASS__ );
		}
		$this->hora_inicio = $hora_inicio;
		return $this;

	}

	public function setHoraFinal(string $hora_final): DashboardMedicoViewModelBuilder {

		if (!preg_match( REGEX_HORARIO, $hora_final )) {
			throw new ResponseException( [ 
				'hora_final' => 'hora_final fora do padrão : ' . $hora_final ], 'Erro durante a construção do objeto ' . __CLASS__ );
		}
		$this->hora_final = $hora_final;
		return $this;

	}

	public function setPacienteId(int $paciente_id): DashboardMedicoViewModelBuilder {

		$this->paciente_id = $paciente_id;
		return $this;

	}

	public function setAtrasado(int $atrasado): DashboardMedicoViewModelBuilder {

		$this->atrasado = $atrasado;
		return $this;

	}

	public function setIdTipoProcedimento(int $id_tipo_procedimento): DashboardMedicoViewModelBuilder {

		$this->id_tipo_procedimento = $id_tipo_procedimento;
		return $this;

	}

	public function setIdProcedimento($id_procedimento): DashboardMedicoViewModelBuilder {

		$this->id_procedimento = $id_procedimento;
		return $this;

	}

	/**
	 *
	 * @param mixed $id_pet
	 * @return DashboardMedicoViewModelBuilder
	 */
	public function setIdPet($id_pet) {

		$this->id_pet = $id_pet;
		return $this;

	}

	/**
	 *
	 * @param mixed $nome_pet
	 * @return DashboardMedicoViewModelBuilder
	 */
	public function setNomePet($nome_pet) {

		$this->nome_pet = $nome_pet;
		return $this;

	}

	/**
	 *
	 * @param mixed $id_cliente
	 * @return DashboardMedicoViewModelBuilder
	 */
	public function setIdCliente($id_cliente) {

		$this->id_cliente = $id_cliente;
		return $this;

	}

}