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

class Traspasos extends CI_Controller {

	public function __construct() {
		parent::__construct();
		if (!$this->Usuario->try()) {
			redirect('login');
		}

		// Load database
		$this->load->model('Traspaso_model', 'Traspaso', true);
	}

	/**
	 * Muestra la lista de traspasos.
	 */
	public function index() {
		$parametros = '?';
		$data['estado'] = $filtros['estado'] = $this->input->get('estado') ?? 'todos';
		$parametros .= 'estado='.$data['estado'];

		$data['origen'] = $filtros['origen'] = $this->input->get('origen') ?? 0;
		$parametros .= '&origen='.$data['origen'];
		// Si no se define responsable se mostrarán las tareas del usuario activo
		$data['destino'] = $filtros['destino'] = $this->input->get('destino') ?? 0;
		$parametros .= '&destino='.$data['destino'];
		// Si no se define solicitante se mostrarán todos
		$data['solicitante'] = $filtros['solicitante'] = $this->input->get('solicitante') ?? 0;
		$parametros .= '&solicitante='.$data['solicitante'];

		$cantidad = 20;
		$pagina = $this->input->get('pagina') ?? 1;
		$offset = ($pagina - 1) * $cantidad;

		//$data['traspasos'] = $this->Traspaso->listado($filtros,[$offset, $cantidad]);

		// Razones diferencia preparados
		$data['razones_preparado'] = [
			0 => 'Seleccionar motivo',
			1 => 'Sin stock disponible',
			2 => 'Stock no encontrado',
			3 => 'Se prioriza Stock bodega',
			4 => 'No cumple mínimo de unidades',
			5 => 'Se considera sin deseados',
			6 => 'Se prioriza caja completa'
		];

		// Razones diferencia recibido
		$data['razones_recibido'] = [
			0 => 'Seleccionar motivo',
			1 => 'No recibido',
			2 => 'Se reciben menos unidades',
			3 => 'Se reciben más unidades',
			4 => 'Se recibe un producto equivocado'
		];

		$traspasos = $this->Traspaso->listado($filtros,[$offset, $cantidad]);
		$data['traspasos'] = $traspasos['traspasos'];
		$data['total'] = $traspasos['total'];

		$data['paginacion'] = paginacion(['url' => base_url().'traspasos/index', 'parametros' => $parametros, 'total' => $data['total'], 'pagina' => $pagina, 'cantidad' => $cantidad]);

		// Pide los datos necesarios para generar traspasos
		$this->load->model('Categoria_model', 'Categoria', true);
		$data['categorias'] = $this->Categoria->list();
		
		$data = $this->Traspaso->datos_globales($data);
		/*
		$data['filtrosEstados'] = ['-1' => 'En Curso', '0' => 'Todas'];
		$data['filtrosEstados'] += $data['estadosTareas'];

		$data['usuariosActivos'] = ['0' => 'Todos'] + $data['usuariosActivos'];
		*/
		$data['title'] = 'Traspasos';
		$data['content'] = $this->load->view('traspasos/index', $data , true);
		$this->load->view('default', $data);
	}

	public function guardar($avanzar = 0){
		//pr($avanzar);
		//pr($this->input->post());
		
		if (!empty($this->input->post())) {
			// Validaciones se realizarán en modelo
			$data = $this->input->post();
			$data['id_solicitante'] = $_SESSION['usuario']['id'];
			$data['avanzar'] = $avanzar;
			$result = $this->Traspaso->guardar($data);

			header('Content-type: application/json');
			echo json_encode($result);
		}
		else {
			pr('No hay post');
		}
	}


	/****************************** Funciones JSON **********************************/


	/**
	 * Entrega toda la info de un traspaso en formato json
	 */
	public function info() {
		 // Si no se recibe un id retorna error
		if ($this->input->post_get('id')) {
			$result['traspaso'] = $this->Traspaso->info($this->input->post_get('id'));
			if ($result['traspaso']) {
				$result['status'] = 'success';
			}
			else {
				$result['status'] = 'error';
				$result['message'] = 'Traspaso no encontrado';
			}
		}
		else {
			$result['status'] = 'error';
			$result['message'] = 'No se recibe id de traspaso';
		}

		header('Content-type: application/json');
		echo json_encode($result);
	}

	/**
	 * Entrega info de productos necesitados en tienda
	 */
	public function automatico($idDestino = 0, $idCategoria = 0, $soloDeseados = 0) {
		$result['traspaso']['productos'] = $this->Traspaso->automatico($idDestino, $idCategoria, $soloDeseados);
		if ($result['traspaso']) {
			$result['status'] = 'success';
		}
		else {
			$result['status'] = 'error';
			$result['message'] = 'Sin Productos Encontrados';
		}

		header('Content-type: application/json');
		echo json_encode($result);
   }

	public function eliminar() {
		if ($this->input->post('id')) {
			$result = $this->Traspaso->eliminar($this->input->post('id'));
			header('Content-type: application/json');
			echo json_encode($result);
		}
		return false;
	}

	public function cancelar() {
		if ($this->input->post('id')) {
			$result = $this->Traspaso->cancelar($this->input->post('id'));
			header('Content-type: application/json');
			echo json_encode($result);
		}
		return false;
	}

	public function liberar() {
		if ($this->input->post('id')) {
			$result = $this->Traspaso->liberar($this->input->post('id'));
			header('Content-type: application/json');
			echo json_encode($result);
		}
		return false;
	}

	public function completar() {
		if (!empty($this->input->post())) {
			// Validaciones se realizarán en modelo
			$data = $this->input->post();
			$data['id_solicitante'] = $_SESSION['usuario']['id'];
			$result = $this->Traspaso->completar($data);

			header('Content-type: application/json');
			echo json_encode($result);
		}
		else {
			pr('No hay post');
		}
	}

	/**
	 * Entrega una versión imprimible de la lista de traspaso
	 */
	public function imprimir($id) {
		$data['traspaso'] = $this->Traspaso->info($id);
		$data = $this->Traspaso->datos_globales($data);

		$data['title'] = 'Traspasos';
		$this->load->view('traspasos/imprimir', $data);
	}

	/**
	 * Toma traspaso para el usuario activo
	 */
	public function preparar($idTraspaso) {
		// Si no se recibe un id retorna error
		$idPreparador = $_SESSION['usuario']['id'];
		$traspaso = $this->Traspaso->preparar($idTraspaso, $idPreparador);
			if (!empty($traspaso['status']) && $traspaso['status'] == 'success') {
				$result['status'] = 'success';
			}
			else {
				$result['status'] = 'error';
				$result['message'] = $traspaso['message'] ?? 'Error al tomar el traspaso';
			}

	   header('Content-type: application/json');
	   echo json_encode($result);
   }

   public function cambiar_destino() {

		if (!in_array($_SESSION['usuario']['perfil'], [1, 2])) {

			echo json_encode([
				'status' => 'error',
				'message' => 'Sin permisos'
			]);

			return;
		}

		$idTraspaso = $this->input->post('id_traspaso');
		$idDestino = $this->input->post('id_destino');

		$res = $this->Traspaso->cambiar_destino($idTraspaso, $idDestino);

		echo json_encode($res);
	}
}