<?php

namespace App\Mappers;

use App\Entities\EspecialidadeProcedimento\EspecialidadeProcedimento;
use App\Utils\Collections\GeneralCollection;
use App\ViewModels\EspecialidadeProcedimento\EspecialidadeProcedimentoDetailsViewModel\EspecialidadeProcedimentoDetailsViewModel;
use App\ViewModels\EspecialidadeProcedimento\EspecialidadeProcedimentoRegistrationViewModel\EspecialidadeProcedimentoRegistrationViewModel;
use App\ViewModels\EspecialidadeProcedimento\EspecialidadeProcedimentoUpdateViewModel\EspecialidadeProcedimentoUpdateViewModel;

class EspecialidadeProcedimentoMapper {

	public static function getEspecialidadeProcedimentoRegistrationVMFromArray(array $data): EspecialidadeProcedimentoRegistrationViewModel {

		return EspecialidadeProcedimentoRegistrationViewModel::builder()->setIdEspecialidade( $data ['id_especialidade'] )
			->setIdProcedimento( $data ['id_procedimento'] )
			->setIdUnidade( $data ['id_unidade'] )
			->build();

	}

	public static function getEspecialidadeProcedimentoFromEspecialidadeProcedimentoRegistrationVM(
			EspecialidadeProcedimentoRegistrationViewModel $especialidade_procedimento_registration_vm): EspecialidadeProcedimento {

		return EspecialidadeProcedimento::builder()->setIdProcedimento( $especialidade_procedimento_registration_vm->getIdProcedimento() )
			->setIdEspecialidade( $especialidade_procedimento_registration_vm->getIdEspecialidade() )
			->setIdUnidade( $especialidade_procedimento_registration_vm->getIdUnidade() )
			->build();

	}

	public static function getEspecialidadeProcedimentoDetailsVMFromArray(array $especialidade_procedimento): EspecialidadeProcedimentoDetailsViewModel {

		return EspecialidadeProcedimentoDetailsViewModel::builder()->setId( $especialidade_procedimento ['id'] )
			->setIdEspecialidade( $especialidade_procedimento ['id_especialidade'] )
			->setIdProcedimento( $especialidade_procedimento ['id_procedimento'] )
			->setIdTipoProcedimento( $especialidade_procedimento ['id_procedimento'] )
			->setDescricaoProcedimento( $especialidade_procedimento ['descricao_procedimento'] )
			->setDescricaoEspecialidade( $especialidade_procedimento ['descricao_especialidade'] )
			->build();

	}

	public static function getEspecialidadeProcedimentoDetailsVMCollectionFromArray(array $response_array): GeneralCollection {

		$especialidade_procedimento_details_vm_collection = new GeneralCollection();
		foreach ( $response_array as $row ) {
			$especialidade_procedimento_details_vm = EspecialidadeProcedimentoMapper::getEspecialidadeProcedimentoDetailsVMFromArray( $row );
			$especialidade_procedimento_details_vm_collection->push( $especialidade_procedimento_details_vm );
		}
		return $especialidade_procedimento_details_vm_collection;

	}

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

		return $paciente_details_vm_collection->toArray();

	}

	public static function getEspecialidadeProcedimentoUpdateVMFromArray(array $data): EspecialidadeProcedimentoUpdateViewModel {

		$especialidade_procedimento_update_vm = new EspecialidadeProcedimentoUpdateViewModel();
		if (isset( $data ['id_especialidade'] )) {
			$especialidade_procedimento_update_vm->setIdEspecialidade( $data ['id_especialidade'] );
		}
		if (isset( $data ['id_procedimento'] )) {
			$especialidade_procedimento_update_vm->setIdProcedimento( $data ['id_procedimento'] );
		}
		if (isset( $data ['id_nidade'] )) {
			$especialidade_procedimento_update_vm->setIdUnidade( $data ['id_unidade'] );
		}
		return $especialidade_procedimento_update_vm;

	}

	public static function getEspecialidadeProcedimentoFromEspecialidadeProcedimentoUpdateVM(
			EspecialidadeProcedimentoUpdateViewModel $especialidade_procedimento_update_vm): EspecialidadeProcedimento {

		$especialidade_procedimento = new EspecialidadeProcedimento();
		if ($especialidade_procedimento_update_vm->getIdEspecialidade()) {
			$especialidade_procedimento->setIdEspecialidade( $especialidade_procedimento_update_vm->getIdEspecialidade() );
		}
		if ($especialidade_procedimento_update_vm->getIdProcedimento()) {
			$especialidade_procedimento->setIdProcedimento( $especialidade_procedimento_update_vm->getIdProcedimento() );
		}
		if ($especialidade_procedimento_update_vm->getIdUnidade()) {
			$especialidade_procedimento->setIdUnidade( $especialidade_procedimento_update_vm->getIdUnidade() );
		}
		return $especialidade_procedimento;

	}

}