<?php

namespace App\Mappers;

use App\Entities\TipoExtorno\TipoExtorno;
use App\Utils\Collections\GeneralCollection;
use App\ViewModels\TipoExtorno\TipoExtornoDetailsViewModel\TipoExtornoDetailsViewModel;
use App\ViewModels\TipoExtorno\TipoExtornoRegistrationViewModel\TipoExtornoRegistrationViewModel;
use App\ViewModels\TipoExtorno\TipoExtornoUpdateViewModel\TipoExtornoUpdateViewModel;
use App\Services\JWT\UsuarioLogado;
use App\Utils\DateUtils;

class TipoExtornoMapper {

	public static function getTipoExtornoRegistrationViewModelFromArray(array $data): TipoExtornoRegistrationViewModel {

		$usr_id = UsuarioLogado::getUsuarioId();
		$data_atz = DateUtils::today();
		$hora_atz = DateUtils::now_time();
		$tipo_extorno_registration_vm = TipoExtornoRegistrationViewModel::builder()->setDescricao( $data ['descricao'] )
			->setCriadoPor( $usr_id )
			->setDataCriacao( $data_atz )
			->setHoraCriacao( $hora_atz )
			->build();
		return $tipo_extorno_registration_vm;

	}

	public static function getTipoExtornoFromTipoExtornoRegistrationViewModel(TipoExtornoRegistrationViewModel $tipo_extorno_registration_vm): TipoExtorno {

		$usr_id = UsuarioLogado::getUsuarioId();
		$data_atz = DateUtils::today();
		$hora_atz = DateUtils::now_time();

		$tipo_extorno = TipoExtorno::builder()->setDescricao( $tipo_extorno_registration_vm->getDescricao() )
			->setCriadoPor( $usr_id )
			->setDataCriacao( $data_atz )
			->setHoraCriacao( $hora_atz )
			->build();
		return $tipo_extorno;

	}

	public static function getTipoExtornoDetailsVMCollectionFromArray(array $table): GeneralCollection {

		$tipo_extorno_details_vm_collection = new GeneralCollection();
		foreach ( $table as $row ) {
			$tipo_extorno = TipoExtornoDetailsViewModel::builder()->setId( $row ['id'] )
				->setDescricao( $row ['descricao'] )
				->setCriadoPor( $row ['criado_por'] )
				->setDataCriacao( $row ['data_criacao'] )->setHoraCriacao($row['hora_criacao'])
				->build();
			$tipo_extorno_details_vm_collection->push( $tipo_extorno );
		}
		return $tipo_extorno_details_vm_collection;

	}

	# # ------------------------------------------------------------------------- ##
	public static function getTipoExtornoDetailsVMFromArray(array $tipo_extorno): TipoExtornoDetailsViewModel {

		return TipoExtornoDetailsViewModel::builder()->setId( $tipo_extorno ['id'] )
			->setDescricao( $tipo_extorno ['descricao'] )
			->build();

	}

	public static function getTipoExtornoDetailsArrayFromTipoExtornoDetailsVMCollection(GeneralCollection $tipo_extorno_details_vm_collection): array {

		return $tipo_extorno_details_vm_collection->toArray();

	}

	public static function getTipoExtornoUpdateVMFromArray(array $data): TipoExtornoUpdateViewModel {

		$usr_id = UsuarioLogado::getUsuarioId();
		$data_atz = DateUtils::today();
		$hora_atz = DateUtils::now_time();
		
		$tipo_extorno_update_vm = new TipoExtornoUpdateViewModel();
		if (isset( $data ['descricao'] )) {
			$tipo_extorno_update_vm->setDescricao( $data ['descricao'] );
		}
		$tipo_extorno_update_vm->setCriadoPor($usr_id);
		$tipo_extorno_update_vm->setDataCriacao($data_atz);
		$tipo_extorno_update_vm->setHoraCriacao($hora_atz);
		return $tipo_extorno_update_vm;

	}

	public static function getTipoExtornoFromTipoExtornoUpdateVM(TipoExtornoUpdateViewModel $tipo_extorno_update_vm): TipoExtorno {
		//$usr_id = UsuarioLogado::getUsuarioId();
		//$data_atz = DateUtils::today();
		//$hora_atz = DateUtils::now_time();
		
		$tipo_extorno = new TipoExtorno();
		if ($tipo_extorno_update_vm->getDescricao()) {
			$tipo_extorno->setDescricao( $tipo_extorno_update_vm->getDescricao() );
			
		}
		$tipo_extorno->setCriadoPor($tipo_extorno_update_vm->getCriadoPor());
		$tipo_extorno->setDataCriacao($tipo_extorno_update_vm->getDataCriacao());
		$tipo_extorno->setHoraCriacao($tipo_extorno_update_vm->getHoraCriacao());
		
		return $tipo_extorno;

	}

}