<?php namespace App\Mappers;


use App\Entities\TipoProcedimento\TipoProcedimento;
use App\Utils\Collections\GeneralCollection;
use App\Utils\Collections\TipoProcedimentoDetailsVMCollection;
use App\ViewModels\TipoProcedimento\TipoProcedimentoDetailsViewModel\TipoProcedimentoDetailsViewModel;
use App\ViewModels\TipoProcedimento\TipoProcedimentoRegistrationViewModel\TipoProcedimentoRegistrationViewModel;
use App\ViewModels\TipoProcedimento\TipoProcedimentoUpdateViewModel\TipoProcedimentoUpdateViewModel;

class TipoProcedimentoMapper
{
    public static function getTipoProcedimentoRegistrationViewModelFromArray (array $data) : TipoProcedimentoRegistrationViewModel {
        $tipo_procedimento_registration_vm = TipoProcedimentoRegistrationViewModel::builder()
            ->setDescricao($data['descricao'])
            ->build();
        return $tipo_procedimento_registration_vm;
    }

    public static function getTipoProcedimentoFromTipoProcedimentoRegistrationViewModel (TipoProcedimentoRegistrationViewModel $tipo_procedimento_registration_vm) : TipoProcedimento {
        $tipo_procedimento = TipoProcedimento::builder()
         ->setDescricao($tipo_procedimento_registration_vm->getDescricao())
         ->build();
        return $tipo_procedimento;
    }

    public static function getTipoProcedimentoDetailsVMCollectionFromArray (array $table) : GeneralCollection {
        $tipo_procedimento_details_vm_collection = new GeneralCollection();
        foreach ($table as $row) {
            $tipo_procedimento = TipoProcedimentoDetailsViewModel::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 getTipoProcedimentoDetailsVMFromArray (array $tipo_procedimento) : TipoProcedimentoDetailsViewModel {
        return TipoProcedimentoDetailsViewModel::builder()
            ->setId($tipo_procedimento['id'])
            ->setDescricao($tipo_procedimento['descricao'])
            ->build();
    }

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



    public static function getTipoProcedimentoUpdateVMFromArray(array $data) : TipoProcedimentoUpdateViewModel {
        $exame_update_vm = new TipoProcedimentoUpdateViewModel ();
        if (isset($data['descricao'])) {
            $exame_update_vm->setDescricao($data['descricao']);
        }
        return $exame_update_vm;
    }

    public static function getTipoProcedimentoFromTipoProcedimentoUpdateVM (TipoProcedimentoUpdateViewModel $exame_update_vm) : TipoProcedimento {
        $exame = new TipoProcedimento();
        if ($exame_update_vm->getDescricao()) {
            $exame->setDescricao($exame_update_vm->getDescricao());
        }
        return $exame;

    }
}