<?php

namespace App\Mappers;

use App\DAO\SetorDAO;
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\Setor\Setor;
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\Setor\SetorDetailsViewModel\SetorDetailsViewModel;
use App\ViewModels\Setor\SetorUpdateViewModel\SetorUpdateViewModel;
use App\ViewModels\Setor\SetorRegistrationViewModel\SetorRegistrationViewModel;

class SetorMapper {

	public static function SetorRegistrationViewModelMapper(array $centro_custo): SetorRegistrationViewModel {

		$jwt_payload = JWTService::getTokenJWTPayload();
		$uid = $jwt_payload ? $jwt_payload->getUid() : null;
		$centro_custo_registration_vm = SetorRegistrationViewModel::builder()
            ->setDescricao( $centro_custo ['descricao'])
            ->setIdCentroCusto( $centro_custo ['id_centro_custo'])
            ->setDesativadoEm( '' )
            ->setCriadoPor( $uid )
            ->setAlteradoPor( $uid )
            ->setDesativadoPor( null )
            ->build()
        ;

		return $centro_custo_registration_vm;

	}

	public static function getSetorFromSetorRegistrationVM(SetorRegistrationViewModel $centro_custo_registration_vm): Setor {

		$centro_custo = new Setor();
		$centro_custo->setDescricao( $centro_custo_registration_vm->getDescricao() );
		$centro_custo->setIdCentroCusto( $centro_custo_registration_vm->getIdCentroCusto() );
		$centro_custo->setDesativadoEm( $centro_custo_registration_vm->getDesativadoEm() );
		$centro_custo->setCriadoPor( $centro_custo_registration_vm->getCriadoPor() );
		$centro_custo->setAlteradoPor( $centro_custo_registration_vm->getAlteradoPor() );
		$centro_custo->setDesativadoPor( $centro_custo_registration_vm->getDesativadoPor() );

		return $centro_custo;

	}

	public static function getSetorDetailsVMListFromArray(array $centro_custo_list): GeneralCollection {

		$centro_custo_details_vm_collection = new GeneralCollection();
		for($i = 0, $number_pacientes = count( $centro_custo_list ); $i < $number_pacientes; $i ++) {
			$centro_custo_details_vm_collection->push( SetorMapper::getSetorListVMFromArray( $centro_custo_list [$i] ) );
		}
		return $centro_custo_details_vm_collection;

	}

	public static function getSetorDetailsVMListFromArrayToUpdate(array $centro_custo_list): GeneralCollection {

		$centro_custo_details_vm_collection = new GeneralCollection();
		for($i = 0, $number_pacientes = count( $centro_custo_list ); $i < $number_pacientes; $i ++) {
			$centro_custo_details_vm_collection->push( SetorMapper::getSetorListVMFromArrayToUpdate( $centro_custo_list [$i] ) );
		}
		return $centro_custo_details_vm_collection;

	}

	public static function getSetorsDetailsArrayFromSetorDetailsVMList(GeneralCollection $centro_custo_details_vm_collection): array {

		return $centro_custo_details_vm_collection->toArray();

	}

	public static function getSetorListVMFromArray(array &$centro_custo): SetorDetailsViewModel {


        $pets = new SetorDAO();

		$centro_custo_details_vm = new SetorDetailsViewModel();
		$centro_custo_details_vm->setId( $centro_custo ['id'] );
		$centro_custo_details_vm->setDescricao( $centro_custo ['descricao'] );
		$centro_custo_details_vm->setIdCentroCusto( $centro_custo ['id_centro_custo'] );
        $centro_custo_details_vm->setDescricaoCentroCusto( $centro_custo ['descricao_centro_custo'] );
		$centro_custo_details_vm->setAtualizadoEm( $centro_custo ['atualizado_em'] );
		$centro_custo_details_vm->setAlteradoPor( $centro_custo ['alterado_por'] );
		$centro_custo_details_vm->setCriadoEm( $centro_custo ['criado_em'] );
		$centro_custo_details_vm->setCriadoPor( $centro_custo ['criado_por'] );
		$centro_custo_details_vm->setDesativadoEm( $centro_custo ['desativado_em'] );
		$centro_custo_details_vm->setDesativadoPor( $centro_custo ['desativado_por'] );
		return $centro_custo_details_vm;

	}

	public static function getSetorListVMFromArrayToUpdate(array &$centro_custo): SetorDetailsViewModel {

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

		return $centro_custo_details_vm;

	}

	public static function getSetorDetailsVMFromArray(array &$centro_custo): SetorDetailsViewModel {

		$centro_custo_details_vm = new SetorDetailsViewModel();
        $centro_custo_details_vm->setId( $centro_custo ['id'] );
        $centro_custo_details_vm->setDescricao( $centro_custo ['descricao'] );
        $centro_custo_details_vm->setDescricaoCentroCusto( $centro_custo ['descricao_centro_custo'] );
        $centro_custo_details_vm->setIdCentroCusto( $centro_custo ['id_centro_custo'] );
        $centro_custo_details_vm->setAtualizadoEm( $centro_custo ['atualizado_em'] );
        $centro_custo_details_vm->setAlteradoPor( $centro_custo ['alterado_por'] );
        $centro_custo_details_vm->setCriadoEm( $centro_custo ['criado_em'] );
        $centro_custo_details_vm->setCriadoPor( $centro_custo ['criado_por'] );
        $centro_custo_details_vm->setDesativadoEm( $centro_custo ['desativado_em'] );
        $centro_custo_details_vm->setDesativadoPor( $centro_custo ['desativado_por'] );

		return $centro_custo_details_vm;

	}

	public static function getSetorUpdateVMFromArray(array $centro_custo_data): SetorUpdateViewModel {

		$centro_custo_update_vm = new SetorUpdateViewModel();
		if (isset( $centro_custo_data ['descricao'] )) {
			$centro_custo_update_vm->setDescricao( $centro_custo_data ['descricao'] );
		}
        if (isset( $centro_custo_data ['id_centro_custo'] )) {
            $centro_custo_update_vm->setIdCentroCusto( $centro_custo_data ['id_centro_custo'] );
        }
		$centro_custo_update_vm->setAlteradoPor( JWTService::getTokenJWTPayload()->getUid() );
		return $centro_custo_update_vm;

	}

	public static function getSetorFromSetorUpdateVM(SetorUpdateViewModel $centro_custo_update_vm): Setor {

		$centro_custo = new Setor();

		if ($centro_custo_update_vm->getDescricao()) {
			$centro_custo->setDescricao( $centro_custo_update_vm->getDescricao() );
		}
        if ($centro_custo_update_vm->getIdCentroCusto()) {
            $centro_custo->setIdCentroCusto( $centro_custo_update_vm->getIdCentroCusto() );
        }
		if ($centro_custo_update_vm->getAtualizadoEm()) {
			$centro_custo->setAtualizadoEm( $centro_custo_update_vm->getAtualizadoEm() );
		}
		if ($centro_custo_update_vm->getAlteradoPor()) {
			$centro_custo->setAlteradoPor( $centro_custo_update_vm->getAlteradoPor() );
		}
		return $centro_custo;

	}

}
