<?php


namespace App\Mappers;

use App\Entities\Medicamento\Medicamento;
use App\Services\JWTService;
use App\Utils\Collections\GeneralCollection;
use App\ViewModels\Medicamento\MedicamentoDetailsViewModel\MedicamentoDetailsViewModel;
use App\ViewModels\Medicamento\MedicamentoRegistrationViewModel\MedicamentoRegistrationViewModel;
use App\ViewModels\Medicamento\MedicamentoUpdateViewModel\MedicamentoUpdateViewModel;

class MedicamentoMapper {

	public static function getMedicamentoRegistrationVMFromArray(array $data): MedicamentoRegistrationViewModel {

		return MedicamentoRegistrationViewModel::builder()->setNome( $data ['nome'] )
			->setQuantidade( $data ['quantidade'] )
			->setPosologia( $data ['posologia'] )
			->setIdClinica( $data ['id_clinica'] )
			->build();

	}

	public static function getMedicamentoFromMedicamentoRegistrationVM(MedicamentoRegistrationViewModel $medicamento_registration_vm): Medicamento {

		return Medicamento::builder()->setNome( $medicamento_registration_vm->getNome() )
			->setQuantidade( $medicamento_registration_vm->getQuantidade() )
			->setPosologia( $medicamento_registration_vm->getPosologia() )
			->setIdClinica( $medicamento_registration_vm->getIdClinica() )
			->build();

	}

	public static function getMedicamentoDetailsVMFromArray(array $medicamento): MedicamentoDetailsViewModel {

		return MedicamentoDetailsViewModel::builder()->setId( $medicamento ['id'] )
			->setNome( $medicamento ['nome'] )
			->setQuantidade( $medicamento ['quantidade'] )
			->setPosologia( $medicamento ['posologia'] )
			->setIdClinica( $medicamento ['id_clinica'] )
			->build();

	}

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

		$medicamento_details_vm_collection = new GeneralCollection();
		foreach ( $response_array as $row ) {
			$medicamento_details_vm = MedicamentoMapper::getMedicamentoDetailsVMFromArray( $row );
			$medicamento_details_vm_collection->push( $medicamento_details_vm );
		}
		return $medicamento_details_vm_collection;

	}

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

		return $paciente_details_vm_collection->toArray();

	}

	public static function getMedicamentoUpdateVMFromArray(array $data): MedicamentoUpdateViewModel {

		$medicamento_update_vm = new MedicamentoUpdateViewModel();
		if (isset( $data ['nome'] )) {
			$medicamento_update_vm->setNome( $data ['nome'] );
		}
		if (isset( $data ['quantidade'] )) {
			$medicamento_update_vm->setQuantidade( $data ['quantidade'] );
		}
		if (isset( $data ['posologia'] )) {
			$medicamento_update_vm->setPosologia( $data ['posologia'] );
		}
		if (isset( $data ['id_clinica'] )) {
			$medicamento_update_vm->setIdClinica( $data ['id_clinica'] );
		}
		return $medicamento_update_vm;

	}

	public static function getMedicamentoFromMedicamentoUpdateVM(MedicamentoUpdateViewModel $medicamento_update_vm): Medicamento {

		$medicamento = new Medicamento();
		if ($medicamento_update_vm->getNome()) {
			$medicamento->setNome( $medicamento_update_vm->getNome() );
		}
		if ($medicamento_update_vm->getQuantidade()) {
			$medicamento->setQuantidade( $medicamento_update_vm->getQuantidade() );
		}
		if ($medicamento_update_vm->getPosologia()) {
			$medicamento->setPosologia( $medicamento_update_vm->getPosologia() );
		}
		if ($medicamento_update_vm->getIdClinica()) {
			$medicamento->setIdClinica( $medicamento_update_vm->getIdClinica() );
		}
		return $medicamento;

	}

}