<?php

namespace App\Controllers;

use App\Controllers\BaseController;
use CodeIgniter\HTTP\Response;
use CodeIgniter\HTTP\ResponseInterface;
use App\Validations\ProdutoValidation;
use App\Services\ProdutoServicoService;
use App\Services\ServiceResponse\ServiceResponseInterface;

class ProdutoServicoController extends BaseController {

	public function registerProduto(): Response {

		$dados = $this->getDataPost();

		$validar = array ();
		$validar = ProdutoValidation::register( $dados );
		if (count( $validar ) > 0) {
			return $this->response->setStatusCode( 400 )
				->setJSON( [ 
				'message' => 'Informe os dados corretamente.',
				'erros' => $validar
			] );
		}

		$service = new ProdutoServicoService();

		//$dados ['valor'] = str_replace( ",", ".", $dados ['valor'] );
		$dados ['valor'] = number_format(floatval( $dados ['valor'] ),2,".","");
		$response_service = $service->registerProduto( $dados );

		$response_messages = [ 
			ServiceResponseInterface::DATABASE_CONNECTION_ERROR => [ 
				'code' => ResponseInterface::HTTP_INTERNAL_SERVER_ERROR,
				'message' => 'Erro de conexão com o banco de dados.'
			],
			ServiceResponseInterface::SUCESS => [ 
				'code' => ResponseInterface::HTTP_OK,
				'message' => 'Produto cadastrado com sucesso.'
			],
			ServiceResponseInterface::INSUFFICIENT_DATA => [ 
				'code' => ResponseInterface::HTTP_BAD_REQUEST,
				'message' => 'Informe os dados corretamente.'
			],
			ServiceResponseInterface::HAVE_CONFLICTS => [ 
				'code' => ResponseInterface::HTTP_CONFLICT,
				'message' => 'Produto já exite para a unidade.'
			]
		];
		return $this->getResponse( $response_service, $response_messages );

	}

	public function changeProdutoStatus(): Response {

		$dados = $this->getDataPost();

		$validar = array ();
		$validar = ProdutoValidation::changestatus( $dados );
		if (count( $validar ) > 0) {
			return $this->response->setStatusCode( 400 )
				->setJSON( [ 
				'message' => 'Informe os dados corretamente.',
				'erros' => $validar
			] );
		}

		$service = new ProdutoServicoService();

		$response_service = $service->changeProdutoStatus( $dados );

		$response_messages = [ 
			ServiceResponseInterface::DATABASE_CONNECTION_ERROR => [ 
				'code' => ResponseInterface::HTTP_INTERNAL_SERVER_ERROR,
				'message' => 'Erro de conexão com o banco de dados.'
			],
			ServiceResponseInterface::SUCESS => [ 
				'code' => ResponseInterface::HTTP_OK,
				'message' => 'alteração realizada com sucesso.'
			],
			ServiceResponseInterface::INSUFFICIENT_DATA => [ 
				'code' => ResponseInterface::HTTP_BAD_REQUEST,
				'message' => 'Informe os dados corretamente.'
			]
		];
		return $this->getResponse( $response_service, $response_messages );

	}

	public function getProdutos(): Response {

		$service = new ProdutoServicoService();

		$response_service = $service->getProdutos();

		$response_messages = [ 
			ServiceResponseInterface::DATABASE_CONNECTION_ERROR => [ 
				'code' => ResponseInterface::HTTP_INTERNAL_SERVER_ERROR,
				'message' => 'Erro de conexão com o banco de dados.'
			],
			ServiceResponseInterface::SUCESS => [ 
				'code' => ResponseInterface::HTTP_OK,
				'message' => 'pesquisa realizada com sucesso.'
			],
			ServiceResponseInterface::INSUFFICIENT_DATA => [ 
				'code' => ResponseInterface::HTTP_BAD_REQUEST,
				'message' => 'Informe os dados corretamente.'
			]
		];
		return $this->getResponse( $response_service, $response_messages );

	}
	
	public function getProdutosByLojaId(int $id_loja, int $id_status_produto): Response {
		
		$service = new ProdutoServicoService();
		
		$response_service = $service->getProdutosByLojaId($id_loja, $id_status_produto);	
		$response_messages = [
				ServiceResponseInterface::DATABASE_CONNECTION_ERROR => [
						'code' => ResponseInterface::HTTP_INTERNAL_SERVER_ERROR,
						'message' => 'Erro de conexão com o banco de dados.'
				],
				ServiceResponseInterface::SUCESS => [
						'code' => ResponseInterface::HTTP_OK,
						'message' => 'pesquisa realizada com sucesso.'
				],
				ServiceResponseInterface::INSUFFICIENT_DATA => [
						'code' => ResponseInterface::HTTP_BAD_REQUEST,
						'message' => 'Informe os dados corretamente.'
				],
				ServiceResponseInterface::RECORD_NOT_FOUND => [
						'code' => ResponseInterface::HTTP_NO_CONTENT,
						'message' => 'Nenhum registro encontrado.'
				]
		];
		return $this->getResponse( $response_service, $response_messages );
		
	}
	
	public function getProdutosByUnidadeId(int $id_unidade): Response {
		
		$service = new ProdutoServicoService();
		
		$response_service = $service->getProdutosByUnidadeId($id_unidade);
		$response_messages = [
				ServiceResponseInterface::DATABASE_CONNECTION_ERROR => [
						'code' => ResponseInterface::HTTP_INTERNAL_SERVER_ERROR,
						'message' => 'Erro de conexão com o banco de dados.'
				],
				ServiceResponseInterface::SUCESS => [
						'code' => ResponseInterface::HTTP_OK,
						'message' => 'pesquisa realizada com sucesso.'
				],
				ServiceResponseInterface::INSUFFICIENT_DATA => [
						'code' => ResponseInterface::HTTP_BAD_REQUEST,
						'message' => 'Informe os dados corretamente.'
				],
				ServiceResponseInterface::RECORD_NOT_FOUND => [
						'code' => ResponseInterface::HTTP_NO_CONTENT,
						'message' => 'Nenhum Registro encontrado.'
				]
		];
		return $this->getResponse( $response_service, $response_messages );
		
	}
	
	public function getProdutosByUnidadeIdWithoutLoja(int $id_unidade, int $id_status): Response {
		
		$service = new ProdutoServicoService();
		
		$response_service = $service->getProdutosByUnidadeIdWithoutLoja($id_unidade, $id_status);
		$response_messages = [
				ServiceResponseInterface::DATABASE_CONNECTION_ERROR => [
						'code' => ResponseInterface::HTTP_INTERNAL_SERVER_ERROR,
						'message' => 'Erro de conexão com o banco de dados.'
				],
				ServiceResponseInterface::SUCESS => [
						'code' => ResponseInterface::HTTP_OK,
						'message' => 'pesquisa realizada com sucesso.'
				],
				ServiceResponseInterface::INSUFFICIENT_DATA => [
						'code' => ResponseInterface::HTTP_BAD_REQUEST,
						'message' => 'Informe os dados corretamente.'
				],
				ServiceResponseInterface::RECORD_NOT_FOUND => [
						'code' => ResponseInterface::HTTP_NO_CONTENT,
						'message' => 'Nenhum Registro encontrado.'
				]
		];
		return $this->getResponse( $response_service, $response_messages );
		
	}

}

