<?php namespace App\Mappers;

use App\Utils\Collections\GeneralCollection;
use App\ViewModels\Internacao\InternacaoDetailsViewModel\InternacaoDetailsViewModel;

class InternacaoMapper
{
    public static function getInternacaoDetailsVMFromArray (array $internacao) : InternacaoDetailsViewModel {
        $label = "";
        $codigo = 0;
        if($internacao['status_requisicao'] == 1 && $internacao['internacao_status'] == 1):
            $codigo = 1;
            $label = "Aguardando entrada internação";
        elseif ($internacao['status_requisicao'] == 2 && $internacao['internacao_status'] == 1):
            $codigo = 2;
            $label = "Internado";
        elseif ($internacao['internacao_status'] == 2 ):
            $codigo = 3;
            $label = "Aguardando alta hospitalar";
        endif;
        return InternacaoDetailsViewModel::builder()
            ->setClienteId($internacao['cliente_id'])
            ->setNomeCliente($internacao['nome_cliente'])
            ->setIdPet($internacao['id_pet'])
            ->setNomePet($internacao['nome_pet'])
            ->setDataRequisicao($internacao['data_requisicao'])
            ->setHoraRequisicao($internacao['hora_requisicao'])
            ->setConvenioClienteId($internacao['convenio_cliente_id'])
            ->setStatusRequisicao($internacao['status_requisicao'])
            ->setNomeStatusRequisicao($label)
            ->setCodigo($codigo)
            ->setDataExecucao($internacao['data_execucao'])
            ->setUsuarioExecutor($internacao['usuario_executor'])
            ->setDataEntradaInternacao($internacao['data_entrada_internacao'])
            ->setDataSaidaInternacao($codigo == 3 ? $internacao['data_saida_internacao'] : "")
            ->build();
    }

    public static function getInternacaoDetailsVMCollectionFromArray (array $response_array) : GeneralCollection {
        $internacao_details_vm_collection = new GeneralCollection();
        foreach ($response_array as $row) {
            $internacao_details_vm = InternacaoMapper::getInternacaoDetailsVMFromArray($row);
            $internacao_details_vm_collection->push($internacao_details_vm);
        }
        return $internacao_details_vm_collection;
    }

    public static function getInternacaosDetailsArrayFromInternacaoDetailsVMCollection (GeneralCollection $paciente_details_vm_collection) : array {
        return $paciente_details_vm_collection->toArray();
    }
}