<?php


namespace App\Mappers;

use App\Entities\Especialidade\Especialidade;
use App\Utils\Collections\GeneralCollection;
// use App\Utils\Collections\EspecialidadeDetailsVMCollection;
use App\ViewModels\Especialidade\EspecialidadeDetailsViewModel\EspecialidadeDetailsViewModel;
use App\ViewModels\Especialidade\EspecialidadeRegistrationViewModel\EspecialidadeRegistrationViewModel;
use App\ViewModels\Especialidade\EspecialidadeUpdateViewModel\EspecialidadeUpdateViewModel;

class EspecialidadeMapper {

	public static function getEspecialidadeRegistrationViewModelFromArray(array $data): EspecialidadeRegistrationViewModel {

		$tipo_procedimento_registration_vm = EspecialidadeRegistrationViewModel::builder()->setDescricao( $data ['descricao'] )
			->build();
		return $tipo_procedimento_registration_vm;

	}

	public static function getEspecialidadeFromEspecialidadeRegistrationViewModel(EspecialidadeRegistrationViewModel $tipo_procedimento_registration_vm): Especialidade {

		$tipo_procedimento = Especialidade::builder()->setDescricao( $tipo_procedimento_registration_vm->getDescricao() )
			->build();
		return $tipo_procedimento;

	}

	public static function getEspecialidadeDetailsVMCollectionFromArray(array $table): GeneralCollection {

		$tipo_procedimento_details_vm_collection = new GeneralCollection();
		foreach ( $table as $row ) {
			$tipo_procedimento = EspecialidadeDetailsViewModel::builder()->setId( $row ['id'] )
				->setDescricao( $row ['descricao'] )
				->build();
			$tipo_procedimento_details_vm_collection->push( $tipo_procedimento );
		}
		return $tipo_procedimento_details_vm_collection;

	}

	# # ------------------------------------------------------------------------- ##
	public static function getEspecialidadeDetailsVMFromArray(array $tipo_procedimento): EspecialidadeDetailsViewModel {

		return EspecialidadeDetailsViewModel::builder()->setId( $tipo_procedimento ['id'] )
			->setDescricao( $tipo_procedimento ['descricao'] )
			->build();

	}

	public static function getEspecialidadesDetailsArrayFromEspecialidadeDetailsVMCollection(GeneralCollection $paciente_details_vm_collection): array {

		return $paciente_details_vm_collection->toArray();

	}

	public static function getEspecialidadeUpdateVMFromArray(array $data): EspecialidadeUpdateViewModel {

		$exame_update_vm = new EspecialidadeUpdateViewModel();
		if (isset( $data ['descricao'] )) {
			$exame_update_vm->setDescricao( $data ['descricao'] );
		}
		return $exame_update_vm;

	}

	public static function getEspecialidadeFromEspecialidadeUpdateVM(EspecialidadeUpdateViewModel $exame_update_vm): Especialidade {

		$exame = new Especialidade();
		if ($exame_update_vm->getDescricao()) {
			$exame->setDescricao( $exame_update_vm->getDescricao() );
		}
		return $exame;

	}

}