<?php
defined('BASEPATH') or exit('No direct script access allowed');

/**
 * @property CI_Input $input
 */
class API extends CI_Controller
{

	public function __construct()
	{
		parent::__construct();

		if (USE_TOKEN_HEADER) {
			$this->checkTokenHeader();
		}
	}

	private function checkTokenHeader()
	{

		$token = $this->input->get_request_header('ApiToken', TRUE);

		if (!$token || ($token && !in_array($token, $GLOBALS['TOKEN_HEADER']))) {
			echo json_encode(array('success' => false, 'msg' => 'Token invalido'));
			exit;
		}
	}

	// Supondo que essa função é uma simplificação de como você acessaria os dados da requisição
	// Você deve ajustar isso conforme a realidade do seu framework ou biblioteca
	private function getRequest()
	{
		return $_SERVER; // Simplificação; use métodos apropriados do seu framework
	}

	public function index()
	{
		echo "Hello World, API";
	}

	public function getCliente($cpf_cnpj)
	{
		$this->load->model('API_model');
		$apiModel = new API_model();

		$retorno_model = $apiModel->getDadosCliente($cpf_cnpj);

		if (sizeof($retorno_model) <= 0) {
			print_r(json_encode(array(
				'success' => false,
				'msg' => "Nenhuma informacao encontrada para o cliente `$cpf_cnpj`"
			)));
			exit;
		}
		print_r(json_encode(array(
			'success' => true,
			'data' => $retorno_model
		)));
	}

	public function getProdutosJSM($sku = null)
	{
		$codigoEmpresa = $this->input->get('empresa', TRUE);

		if (!empty($codigoEmpresa) && !is_numeric($codigoEmpresa)) {
			print_r(json_encode(array(
				'success' => false,
				'msg' => 'Cod. Empresa precisa ser numerico'
			)));
			exit;
		}

		if (empty($codigoEmpresa)) {
			$codigoEmpresa = 1; //default 1 MATRIZ
		}

		$this->load->model('API_model');
		$apiModel = new API_model();

		if (!empty($sku) && !is_numeric($sku)) {
			print_r(json_encode(array(
				'success' => false,
				'msg' => 'SKU precisa ser numerico'
			)));
			exit;
		}

		$retorno_model = $apiModel->getProdutosJSM($sku, null, $codigoEmpresa);

		//print_r($retorno_model);
		print_r(json_encode($retorno_model));
	}

	public function getProdutosJSM_byUnit($measureUnit = null)
	{
		$codigoEmpresa = $this->input->get('empresa', TRUE);

		if (!empty($codigoEmpresa) && !is_numeric($codigoEmpresa)) {
			print_r(json_encode(array(
				'success' => false,
				'msg' => 'Cod. Empresa precisa ser numerico'
			)));
			exit;
		}

		if (empty($codigoEmpresa)) {
			$codigoEmpresa = 1; //default 1 MATRIZ
		}


		$this->load->model('API_model');
		$apiModel = new API_model();

		$retorno_model = $apiModel->getProdutosJSM(null, $measureUnit, $codigoEmpresa);

		//print_r($retorno_model);
		print_r(json_encode($retorno_model));
	}

	public function getUnidadesDeMedida()
	{
		// Filtro apenas via GET: ?codigo=19 ou ?unidade=BR
		$codigo = $this->input->get('codigo', TRUE);
		$unidade = $this->input->get('unidade', TRUE);

		// Não permitir ambos simultaneamente
		if (!empty($codigo) && !empty($unidade)) {
			print_r(json_encode(array(
				'success' => false,
				'msg' => "Informe apenas 'codigo' ou 'unidade' (não ambos)."
			)));
			exit;
		}

		$codigoParam = null;
		$unidadeParam = null;

		if (!empty($codigo)) {
			if (!is_numeric($codigo)) {
				print_r(json_encode(array(
					'success' => false,
					'msg' => 'codigo precisa ser numerico'
				)));
				exit;
			}
			$codigoParam = (int) $codigo;
		} elseif (!empty($unidade)) {
			$unidadeParam = strtoupper(trim($unidade));
		}

		$this->load->model('API_model');
		$apiModel = new API_model();

		$retorno_model = $apiModel->getUnidadesDeMedida($codigoParam, $unidadeParam);

		print_r(json_encode($retorno_model));
	}

	public function getVendasJSM()
	{
		$this->load->model('API_model');
		$apiModel = new API_model();

		$page = (int) $this->input->get('page', TRUE);
		$pageSize = (int) $this->input->get('pageSize', TRUE);
		$date = $this->input->get('date', TRUE);
		$tipo_pedido = mb_strtolower($this->input->get('tipo_pedido', TRUE));

		$dateStart = $this->input->get('dateStart', TRUE);
		$dateEnd = $this->input->get('dateEnd', TRUE);
		$codigoEmpresa = $this->input->get('empresa', TRUE);
		$codigoVenda = $this->input->get('venda', TRUE);

		if (!empty($tipo_pedido) && $tipo_pedido != 'pedido' && $tipo_pedido != 'orcamento') {
			print_r(json_encode(array(
				'success' => false,
				'msg' => 'Tipo de pedido inválido'
			)));
			exit;
		}

		if (!empty($dateStart) || !empty($dateEnd)) {
			if (empty($dateStart) || empty($dateEnd)) {
				print_r(json_encode(array(
					'success' => false,
					'msg' => 'Para filtrar por período, é necessário informar as duas datas: dateStart e dateEnd'
				)));
				exit;
			}

			$dateStart = date('Y-m-d', strtotime($dateStart));
			$dateEnd = date('Y-m-d', strtotime($dateEnd));

			if ($dateStart > $dateEnd) {
				print_r(json_encode(array(
					'success' => false,
					'msg' => 'A data inicial (dateStart) não pode ser maior que a data final (dateEnd)'
				)));
				exit;
			}
		} else {
			$dateStart = null;
			$dateEnd = null;
		}

		if (!empty($codigoEmpresa) && !is_numeric($codigoEmpresa)) {
			print_r(json_encode(array(
				'success' => false,
				'msg' => 'Cod. Empresa precisa ser numerico'
			)));
			exit;
		}

		if (empty($codigoEmpresa)) {
			$codigoEmpresa = 1; //default 1 MATRIZ
		}

		if (empty($page)) {
			$page = 1;
		}

		if (empty($pageSize) || $pageSize > 50 || $pageSize < 1) {
			$pageSize = 50;
		}

		$retorno_model = $apiModel->getVendasJSM(
			$codigoVenda,
			$page,
			$pageSize,
			$date,
			$tipo_pedido,
			$dateStart,
			$dateEnd,
			$codigoEmpresa
		);

		print_r(json_encode($retorno_model));
	}

	public function getVendasPKR()
	{
		$date = $this->input->get('date', TRUE);
		$dateStart = $this->input->get('dateStart', TRUE);
		$dateEnd = $this->input->get('dateEnd', TRUE);

		if (!empty($date) || !empty($dateStart) || !empty($dateEnd)) {
			print_r(json_encode(array(
				'success' => false,
				'msg' => 'Consulta PKR permite apenas empresa e venda'
			)));
			exit;
		}

		$codigoEmpresa = $this->input->get('empresa', TRUE);
		$codigoVenda = $this->input->get('venda', TRUE);

		if (empty($codigoEmpresa) || !is_numeric($codigoEmpresa)) {
			print_r(json_encode(array(
				'success' => false,
				'msg' => 'Cod. Empresa precisa ser numerico e obrigatório'
			)));
			exit;
		}

		if (empty($codigoVenda) || !is_numeric($codigoVenda)) {
			print_r(json_encode(array(
				'success' => false,
				'msg' => 'Cod. Venda precisa ser numerico e obrigatório'
			)));
			exit;
		}

		$this->load->model('API_model');
		$apiModel = new API_model();

		$retorno_model = $apiModel->getVendasPKR((int) $codigoVenda, (int) $codigoEmpresa);

		print_r(json_encode($retorno_model));
	}
}
