<?php

namespace app\Mappers;

use App\Services\JWT\UsuarioLogado;
use App\Utils\DateUtils;
use App\ViewModels\LojaCompra\LojaCompraCartaoCreditoPagSeguro\LojaCompraRegistrationViewModel\LojaCompraCardRegistrationViewModel;
use App\ViewModels\LojaCompra\LojaCompraCartaoCreditoPagSeguro\LojaCompraRegistrationViewModel\LojaCompraPaymentMethodRegistrationViewModel;
use App\ViewModels\LojaCompra\LojaCompraCartaoCreditoPagSeguro\LojaCompraRegistrationViewModel\LojaCompraProdutoRegistrationViewModel;
use App\ViewModels\LojaCompra\LojaCompraCartaoCreditoPagSeguro\LojaCompraRegistrationViewModel\LojaCompraCartaoRegistrationViewModel;
use App\ViewModels\LojaCompra\LojaCompraCartaoCreditoRegistrationViewModel\LojaCompraCartaoCreditoRegistrationViewModel;
use App\ViewModels\LojaCompra\LojaCompraMedicinaCarinhoRegistrationViewModel\LojaCompraMedicinaCarinhoRegistrationViewModel;

class LojaCompraMapper {

	public static function getLojaCompracartaoCreditoRegistrationViewModelFromArray(array $dados): LojaCompraCartaoCreditoRegistrationViewModel {

		$data_r = DateUtils::today();
		$hora_r = DateUtils::now_time();

		$lojaResistration = LojaCompraCartaoCreditoRegistrationViewModel::builder()->setIdLoja( $dados ['id_loja'] )
			->setIdLojaTipoCompra( 1 )
			->setIdStatus( 1 )
			->setIdUsuario( $dados ['id_usuario'] )
			->setValor( number_format( $dados ['valor_total'], 2, ".", "" ) )
			->setDataRequisicao( $data_r )
			->setHoraRequisicao( $hora_r )
			->build();

		return $lojaResistration;

	}

	public static function getLojaCompraCardRegistrationViewModelFromArray(array $dados): LojaCompraCardRegistrationViewModel {

		$card = $dados ['payment_method'] ['card'];

		$lojaResistration = LojaCompraCardRegistrationViewModel::builder()->setEncrypted( $card ['encrypted'] )
			->setExpMonth( intval( $card ['exp_month'] ) )
			->setExpYear( intval( $card ['exp_year'] ) )
			->setSecurityCode( $card ['security_code'] )
			->setStore( $card ['store'] )
			->setHolder( $card ['holder'] )
			->build();

		return $lojaResistration;

	}

	public static function getLojaCompraPayamentMethodRegistrationViewModelFromArray(array $dados, LojaCompraCardRegistrationViewModel $obj): LojaCompraPaymentMethodRegistrationViewModel {

		$payment = $dados ['payment_method'];

		$lojaResistration = LojaCompraPaymentMethodRegistrationViewModel::builder()->setType( $payment ['type'] )
			->setInstallments( $payment ['installments'] )
			->setCapture( $payment ['capture'] )
			->setSoftDescriptor( "Televet Play" )
			->setCard( $obj )
			->build();

		return $lojaResistration;

	}

	public static function getLojaCompraProdutosRegistrationViewModelFromArray(array $dados): array {

		$produtos = $dados ['produtos'];

		$array_produtos = array ();

		for($i = 0; $i < count( $produtos ); $i++) {
			$p = $produtos [$i];
			$lojaResistration = LojaCompraProdutoRegistrationViewModel::builder()->setIdLojaProduto( $p ['id_loja_produto'] )
				->setNome( $p ['nome'] ?? "")
				->setQuantidade( $p ['quantidade'] )
				->setValorUnidade( $p ['valor_unidade'] )
				->setValor( $p ['valor'] )
				->build();
			array_push( $array_produtos, $lojaResistration );
		}

		return $array_produtos;

	}

	public static function getLojaCompraCartaoRegistrationViewModelFromArray(array $dados, array $produtos,
			LojaCompraPaymentMethodRegistrationViewModel $payment): LojaCompraCartaoRegistrationViewModel {

		$lojaResistration = LojaCompraCartaoRegistrationViewModel::builder()->setIdUsuario( $dados ['id_usuario'] )
			->setIdPet( $dados ['id_pet'] )
			->setIdLoja( $dados ['id_loja'] )
			->setPaymentMethod( $payment )
			->setProdutos( $produtos )
			->setValorTotal( 100 *($dados ['valor_total']) )
			->build();

		return $lojaResistration;

	}


    public static function getLojaCompraMedicinaCarinhoViewModelFromArray(array $dados): LojaCompraMedicinaCarinhoRegistrationViewModel {

        $data_r = DateUtils::today();
        $hora_r = DateUtils::now_time();

        $lojaResistration = LojaCompraMedicinaCarinhoRegistrationViewModel::builder()->setIdLoja( $dados ['id_loja'] )
            ->setIdLojaTipoCompra( 6 ) // PLANO
            ->setIdStatus( 3 )
            ->setIdUsuario( $dados ['id_usuario'] )
            ->setValor( number_format( $dados ['valor_total'], 2, ".", "" ) )
            ->setDataRequisicao( $data_r )
            ->setHoraRequisicao( $hora_r )
            ->build();

        return $lojaResistration;

    }

}

