<?php

namespace App\Services;

use App\Services\Service;
use App\Services\ServiceResponse\ServiceResponse;
use App\Services\ServiceResponse\ServiceResponseInterface;
use App\Mappers\ProdutoMapper;
use App\DAO\ProdutoServicoDAO;
use App\DAO\DAOResponse\DAOResponseInterface;

class ProdutoServicoService extends Service {

	public function registerProduto(array $dados): ServiceResponse {

		$serviceReponse = new ServiceResponse();

		$produtoRegistration_vm = ProdutoMapper::getProdutoRegistrationViewModelFromArray( $dados );

		$produtoDao = new ProdutoServicoDAO();

		$response_exist = $produtoDao->isExistProdutoToUnidadeId( $produtoRegistration_vm );

		if ($response_exist->getStatus() == DAOResponseInterface::SUCESS) {
			$serviceReponse->setStatus( ServiceResponseInterface::HAVE_CONFLICTS );
			$serviceReponse->setData( [ ] );
			return $serviceReponse;
		}

		if ($response_exist->getStatus() == DAOResponseInterface::DATABASE_CONNECTION_ERROR) {
			$serviceReponse->setStatus( ServiceResponseInterface::DATABASE_CONNECTION_ERROR );
			$serviceReponse->setErrors( $response_exist->getErrors() );
			$serviceReponse->setData( [ ] );
			return $serviceReponse;
		}

		if ($response_exist->getStatus() == DAOResponseInterface::RECORD_NOT_FOUND) {
			$daoResponse = $produtoDao->registerProduto( $produtoRegistration_vm );
			$serviceReponse = $this->setServiceResponse( $daoResponse );
		}

		return $serviceReponse;

	}

	public function changeProdutoStatus(array $dados): ServiceResponse {

		$serviceReponse = new ServiceResponse();

		$lojaChangeStatus_vm = ProdutoMapper::getProdutoChangeStatusViewModelFromArray( $dados );

		$produtoDao = new ProdutoServicoDAO();
		$daoResponse = $produtoDao->changeStatusProduto( $lojaChangeStatus_vm );
		$serviceReponse = $this->setServiceResponse( $daoResponse );

		return $serviceReponse;

	}

	public function getProdutos(): ServiceResponse {

		$serviceReponse = new ServiceResponse();

		$produtoDao = new ProdutoServicoDAO();
		$daoResponse = $produtoDao->getProdutos();
		$serviceReponse = $this->setServiceResponse( $daoResponse );

		return $serviceReponse;

	}

	public function getProdutosByLojaId(int $id_loja, int $id_status_produto): ServiceResponse {

		$serviceReponse = new ServiceResponse();

		$produtoDao = new ProdutoServicoDAO();
		$daoResponse = $produtoDao->getProdutosLojaId( $id_loja, $id_status_produto );
		$serviceReponse = $this->setServiceResponse( $daoResponse );

		return $serviceReponse;

	}

	public function getProdutosByUnidadeId(int $id_unidade): ServiceResponse {

		$serviceReponse = new ServiceResponse();

		$produtoDao = new ProdutoServicoDAO();
		$daoResponse = $produtoDao->getProdutosUnidadeId( $id_unidade );
		$serviceReponse = $this->setServiceResponse( $daoResponse );

		return $serviceReponse;

	}

	public function getProdutosByUnidadeIdWithoutLoja(int $id_unidade, int $id_status): ServiceResponse {

		$serviceReponse = new ServiceResponse();

		$produtoDao = new ProdutoServicoDAO();
		$daoResponse = $produtoDao->getProdutosUnidadeIdWithoutLoja( $id_unidade, $id_status );
		$serviceReponse = $this->setServiceResponse( $daoResponse );

		return $serviceReponse;

	}
	
	public function getProdutoFromlojaProdutoId(int $idcompra, int $idlojaproduto): ServiceResponse {
		
		$serviceReponse = new ServiceResponse();
		
		$produtoDao = new ProdutoServicoDAO();
		$daoResponse = $produtoDao->getProdutoFromlojaProdutoId( $idcompra, $idlojaproduto );
		$serviceReponse = $this->setServiceResponse( $daoResponse );
		
		return $serviceReponse;
	}

}

