<?php

namespace App\Mappers;

use App\DAO\ClassificacaoRiscoDAO;
use App\DAO\PetDAO;
use App\Entities\CEP\CEP;
use App\Entities\Cliente\Cliente;
use App\Entities\ConfirmacaoEmail\ConfirmacaoEmail;
use App\Entities\Endereco\Endereco;
use App\Entities\ClassificacaoRisco\ClassificacaoRisco;
use App\Entities\Pessoa\Pessoa;
use App\Entities\PessoaFisica\PessoaFisica;
use App\Entities\Usuario\Usuario;
use App\Entities\UsuarioPerfil\UsuarioPerfil;
use App\Services\JWTService;
use App\Utils\Collections\GeneralCollection;
use App\Utils\DateUtils;
use App\ViewModels\ClassificacaoRisco\ClassificacaoRiscoDetailsViewModel\ClassificacaoRiscoDetailsViewModel;
use App\ViewModels\ClassificacaoRisco\ClassificacaoRiscoUpdateViewModel\ClassificacaoRiscoUpdateViewModel;
use App\ViewModels\ClassificacaoRisco\ClassificacaoRiscoRegistrationViewModel\ClassificacaoRiscoRegistrationViewModel;

class ClassificacaoRiscoMapper {

	public static function ClassificacaoRiscoRegistrationViewModelMapper(array $classificacao_risco): ClassificacaoRiscoRegistrationViewModel {

		$jwt_payload = JWTService::getTokenJWTPayload();
		$uid = $jwt_payload ? $jwt_payload->getUid() : null;
		$classificacao_risco_registration_vm = ClassificacaoRiscoRegistrationViewModel::builder()
            ->setDescricao( $classificacao_risco ['descricao'])
            ->setIdUnidade( $classificacao_risco ['id_unidade'])
            ->setCor( $classificacao_risco ['cor'])
            ->setValor( $classificacao_risco ['valor'])
            ->setDesativadoEm( '' )
            ->setCriadoPor( $uid )
            ->setAlteradoPor( $uid )
            ->setDesativadoPor( null )
            ->build()
        ;

		return $classificacao_risco_registration_vm;

	}

	public static function getClassificacaoRiscoFromClassificacaoRiscoRegistrationVM(ClassificacaoRiscoRegistrationViewModel $classificacao_risco_registration_vm): ClassificacaoRisco {

		$classificacao_risco = new ClassificacaoRisco();
		$classificacao_risco->setDescricao( $classificacao_risco_registration_vm->getDescricao() );
		$classificacao_risco->setIdUnidade( $classificacao_risco_registration_vm->getIdUnidade() );
		$classificacao_risco->setCor( $classificacao_risco_registration_vm->getCor() );
		$classificacao_risco->setValor( $classificacao_risco_registration_vm->getValor() );
		$classificacao_risco->setDesativadoEm( $classificacao_risco_registration_vm->getDesativadoEm() );
		$classificacao_risco->setCriadoPor( $classificacao_risco_registration_vm->getCriadoPor() );
		$classificacao_risco->setAlteradoPor( $classificacao_risco_registration_vm->getAlteradoPor() );
		$classificacao_risco->setDesativadoPor( $classificacao_risco_registration_vm->getDesativadoPor() );

		return $classificacao_risco;

	}

	public static function getClassificacaoRiscoDetailsVMListFromArray(array $classificacao_risco_list): GeneralCollection {

		$classificacao_risco_details_vm_collection = new GeneralCollection();
		for($i = 0, $number_pacientes = count( $classificacao_risco_list ); $i < $number_pacientes; $i ++) {
			$classificacao_risco_details_vm_collection->push( ClassificacaoRiscoMapper::getClassificacaoRiscoListVMFromArray( $classificacao_risco_list [$i] ) );
		}
		return $classificacao_risco_details_vm_collection;

	}

	public static function getClassificacaoRiscoDetailsVMListFromArrayToUpdate(array $classificacao_risco_list): GeneralCollection {

		$classificacao_risco_details_vm_collection = new GeneralCollection();
		for($i = 0, $number_pacientes = count( $classificacao_risco_list ); $i < $number_pacientes; $i ++) {
			$classificacao_risco_details_vm_collection->push( ClassificacaoRiscoMapper::getClassificacaoRiscoListVMFromArrayToUpdate( $classificacao_risco_list [$i] ) );
		}
		return $classificacao_risco_details_vm_collection;

	}

	public static function getClassificacaoRiscosDetailsArrayFromClassificacaoRiscoDetailsVMList(GeneralCollection $classificacao_risco_details_vm_collection): array {

		return $classificacao_risco_details_vm_collection->toArray();

	}

	public static function getClassificacaoRiscoListVMFromArray(array &$classificacao_risco): ClassificacaoRiscoDetailsViewModel {


        $pets = new ClassificacaoRiscoDAO();

		$classificacao_risco_details_vm = new ClassificacaoRiscoDetailsViewModel();
		$classificacao_risco_details_vm->setId( $classificacao_risco ['id'] );
		$classificacao_risco_details_vm->setDescricao( $classificacao_risco ['descricao'] );
		$classificacao_risco_details_vm->setNomeUnidade( $classificacao_risco ['nome_unidade'] );
		$classificacao_risco_details_vm->setIdUnidade( $classificacao_risco ['id_unidade'] );
		$classificacao_risco_details_vm->setCor( $classificacao_risco ['cor'] );
		$classificacao_risco_details_vm->setValor( $classificacao_risco ['valor'] );
		$classificacao_risco_details_vm->setAtualizadoEm( $classificacao_risco ['atualizado_em'] );
		$classificacao_risco_details_vm->setAlteradoPor( $classificacao_risco ['alterado_por'] );
		$classificacao_risco_details_vm->setCriadoEm( $classificacao_risco ['criado_em'] );
		$classificacao_risco_details_vm->setCriadoPor( $classificacao_risco ['criado_por'] );
		$classificacao_risco_details_vm->setDesativadoEm( $classificacao_risco ['desativado_em'] );
		$classificacao_risco_details_vm->setDesativadoPor( $classificacao_risco ['desativado_por'] );
		return $classificacao_risco_details_vm;

	}

	public static function getClassificacaoRiscoListVMFromArrayToUpdate(array &$classificacao_risco): ClassificacaoRiscoDetailsViewModel {

		// $classificacao_risco_details_vm = ClassificacaoRiscoDetailsViewModel::builder()->setId( $classificacao_risco ['id'] )->setCpf( $classificacao_risco ['cpf'] )->setIdCliente( $classificacao_risco ['id_cliente'] )->setRg( $classificacao_risco ['rg'] )->setNome( $classificacao_risco ['nome'] )->setGenero( $classificacao_risco ['genero'] )->setDataNascimento( $classificacao_risco ['data_nascimento'] )->setTelefone1( $classificacao_risco ['telefone_1'] )->setTelefone2( $classificacao_risco ['telefone_2'] )->setObservacao( $classificacao_risco ['observacao'] )->setCep( $classificacao_risco ['cep'] )->setNumero( $classificacao_risco ['numero'] )->setComplemento( $classificacao_risco ['complemento'] )->setReferencias( $classificacao_risco ['referencias'] )->setEstado( $classificacao_risco ['estado'] )->setCidade( $classificacao_risco ['cidade'] )->setBairro( $classificacao_risco ['bairro'] )->setLogradouro( $classificacao_risco ['logradouro'] )->setEmail( $classificacao_risco ['email'] )->setFoto( $classificacao_risco ['foto'] )->setIndicadoPor( $classificacao_risco ['indicado_por'] )->setProfissao( $classificacao_risco ['profissao'] )->setEstadoCivil( $classificacao_risco ['estado_civil'] )->setConvenio( $classificacao_risco ['convenio'] )->build();
		$classificacao_risco_details_vm = new ClassificacaoRiscoDetailsViewModel();
        $classificacao_risco_details_vm->setId( $classificacao_risco ['id'] );
        $classificacao_risco_details_vm->setDescricao( $classificacao_risco ['descricao'] );
        $classificacao_risco_details_vm->setIdUnidade( $classificacao_risco ['id_unidade'] );
        $classificacao_risco_details_vm->setCor( $classificacao_risco ['cor'] );
        $classificacao_risco_details_vm->setValor( $classificacao_risco ['valor'] );
        $classificacao_risco_details_vm->setAtualizadoEm( $classificacao_risco ['atualizado_em'] );
        $classificacao_risco_details_vm->setAlteradoPor( $classificacao_risco ['alterado_por'] );
        $classificacao_risco_details_vm->setCriadoEm( $classificacao_risco ['criado_em'] );
        $classificacao_risco_details_vm->setCriadoPor( $classificacao_risco ['criado_por'] );
        $classificacao_risco_details_vm->setDesativadoEm( $classificacao_risco ['desativado_em'] );
        $classificacao_risco_details_vm->setDesativadoPor( $classificacao_risco ['desativado_por'] );

		return $classificacao_risco_details_vm;

	}

	public static function getClassificacaoRiscoDetailsVMFromArray(array &$classificacao_risco): ClassificacaoRiscoDetailsViewModel {

		$classificacao_risco_details_vm = new ClassificacaoRiscoDetailsViewModel();
        $classificacao_risco_details_vm->setId( $classificacao_risco ['id'] );
        $classificacao_risco_details_vm->setDescricao( $classificacao_risco ['descricao'] );
        $classificacao_risco_details_vm->setIdUnidade( $classificacao_risco ['id_unidade'] );
        $classificacao_risco_details_vm->setCor( $classificacao_risco ['cor'] );
        $classificacao_risco_details_vm->setValor( $classificacao_risco ['valor'] );
        $classificacao_risco_details_vm->setAtualizadoEm( $classificacao_risco ['atualizado_em'] );
        $classificacao_risco_details_vm->setAlteradoPor( $classificacao_risco ['alterado_por'] );
        $classificacao_risco_details_vm->setCriadoEm( $classificacao_risco ['criado_em'] );
        $classificacao_risco_details_vm->setCriadoPor( $classificacao_risco ['criado_por'] );
        $classificacao_risco_details_vm->setDesativadoEm( $classificacao_risco ['desativado_em'] );
        $classificacao_risco_details_vm->setDesativadoPor( $classificacao_risco ['desativado_por'] );

		return $classificacao_risco_details_vm;

	}

	public static function getClassificacaoRiscoUpdateVMFromArray(array $classificacao_risco_data): ClassificacaoRiscoUpdateViewModel {

		$classificacao_risco_update_vm = new ClassificacaoRiscoUpdateViewModel();
		if (isset( $classificacao_risco_data ['descricao'] )) {
			$classificacao_risco_update_vm->setDescricao( $classificacao_risco_data ['descricao'] );
		}
        if (isset( $classificacao_risco_data ['id_unidade'] )) {
            $classificacao_risco_update_vm->setIdUnidade( $classificacao_risco_data ['id_unidade'] );
        }
        if (isset( $classificacao_risco_data ['cor'] )) {
            $classificacao_risco_update_vm->setCor( $classificacao_risco_data ['cor'] );
        }
        if (isset( $classificacao_risco_data ['valor'] )) {
            $classificacao_risco_update_vm->setValor( $classificacao_risco_data ['valor'] );
        }
		$classificacao_risco_update_vm->setAlteradoPor( JWTService::getTokenJWTPayload()->getUid() );
		return $classificacao_risco_update_vm;

	}

	public static function getClassificacaoRiscoFromClassificacaoRiscoUpdateVM(ClassificacaoRiscoUpdateViewModel $classificacao_risco_update_vm): ClassificacaoRisco {

		$classificacao_risco = new ClassificacaoRisco();

		if ($classificacao_risco_update_vm->getDescricao()) {
			$classificacao_risco->setDescricao( $classificacao_risco_update_vm->getDescricao() );
		}
        if ($classificacao_risco_update_vm->getIdUnidade()) {
            $classificacao_risco->setIdUnidade( $classificacao_risco_update_vm->getIdUnidade() );
        }
        if ($classificacao_risco_update_vm->getCor()) {
            $classificacao_risco->setCor( $classificacao_risco_update_vm->getCor() );
        }
        if ($classificacao_risco_update_vm->getValor()) {
            $classificacao_risco->setValor( $classificacao_risco_update_vm->getValor() );
        }
		if ($classificacao_risco_update_vm->getAtualizadoEm()) {
			$classificacao_risco->setAtualizadoEm( $classificacao_risco_update_vm->getAtualizadoEm() );
		}
		if ($classificacao_risco_update_vm->getAlteradoPor()) {
			$classificacao_risco->setAlteradoPor( $classificacao_risco_update_vm->getAlteradoPor() );
		}
		return $classificacao_risco;

	}
}
