<?php


namespace App\Mappers;

use App\Entities\Arquivo\Arquivo;
use App\Services\EncryptService;
use App\Utils\Collections\GeneralCollection;
use App\ViewModels\Arquivo\ArquivoListViewModel\ArquivoListViewModel;
use App\ViewModels\Arquivo\ArquivoRegistrationViewModel\ArquivoRegistrationViewModel;

class ArquivoMapper {

	public static function getArquivoRegistrationVMFromArray(array $data, string $url): ArquivoRegistrationViewModel {

		$id_clinica = $data ['id_clinica'] == 'null' ? null : $data ['id_clinica'];
		$id_medico = $data ['id_medico'] == 'null' ? null : $data ['id_medico'];

		return ArquivoRegistrationViewModel::builder()->setDescricao( $data ['descricao'] )
			->setIdClinica( $id_clinica )
			->setIdMedico( $id_medico )
			->setIdPaciente( $data ['id_paciente'] )
			->setIdPet( $data ['id_pet'] ?? 0)
			->setTutorView( $data ['tutor_view'] )
			->setArquivo( $url )
			->build();

	}

	public static function getArquivoFromArquivoRegistrationVM(ArquivoRegistrationViewModel $procedimento_registration_vm): Arquivo {

		return Arquivo::builder()->setIdClinica( $procedimento_registration_vm->getIdClinica() )
			->setIdMedico( $procedimento_registration_vm->getIdMedico() )
			->setIdPaciente( $procedimento_registration_vm->getIdPaciente() )
			->setIdPet( $procedimento_registration_vm->getIdPet() )
			->setArquivo( $procedimento_registration_vm->getArquivo() )
			->setDescricao( $procedimento_registration_vm->getDescricao() )
			->setTutorView( $procedimento_registration_vm->getTutorView() )
			->setCriadoPor( $procedimento_registration_vm->getCriadoPor() )
			->build();

	}

	# ----------------------------------------------------------------------------------------------------------------#
	public static function getArquivoListVMCollectionFromArray(array $response_array): GeneralCollection {

		$arquivo_details_vm_collection = new GeneralCollection();
		foreach ( $response_array as $row ) {
			$key = "HLuM5EYw5cd0vdJR9yLlM6wt2vte5iniQBqE70nZuhK=";
			if (file_exists( $row ['arquivo'] ) === true) {
				$get_file = file_get_contents( $row ['arquivo'] );
			} else {
				$get_file = '';
			}
			$encrypt = new EncryptService();

			$msg_decrypted = $encrypt->my_decrypt( $get_file, $key );
			$base64 = base64_encode( $msg_decrypted );

			$procedimento_details_vm = ArquivoMapper::getArquivoListVMFromArray( $row );
			$arquivo_details_vm_collection->push( $procedimento_details_vm );
		}
		return $arquivo_details_vm_collection;

	}

	public static function getArquivoDetailsVMFromArray(array $arquivo, $file): ArquivoListViewModel {

		return ArquivoListViewModel::builder()->setId( $arquivo ['id'] )
			->setIdClinica( $arquivo ['id_clinica'] )
			->setIdMedico( $arquivo ['id_medico'] )
			->setIdPaciente( $arquivo ['id_paciente'] )
			->setId_Pet( $arquivo ['id_pet'] ?? 0)
			->setDescricao( $arquivo ['descricao'] )
			->setArquivo( $file )
			->setExt( $arquivo ['ext'] )
			->build();

	}

	public static function getArquivoListVMFromArray(array $arquivo): ArquivoListViewModel {

		return ArquivoListViewModel::builder()->setId( $arquivo ['id'] )
			->setIdClinica( $arquivo ['id_clinica'] )
			->setIdMedico( $arquivo ['id_medico'] )
			->setIdPaciente( $arquivo ['id_paciente'] )
			->setId_Pet( $arquivo ['id_pet'] ?? 0)
			->setDescricao( $arquivo ['descricao'] )
			->setTutorView( $arquivo ['tutor_view'] )
			->setDataCriacao( $arquivo ['criado_em'] )
			->setArquivo( [ ] )
			->build();

	}

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

		return $paciente_details_vm_collection->toArray();

	}

	# ----------------------------------------------------------------------------------------------------------------#
}