<?php

class Usuario_model extends CI_Model {
	public function login($data) {
		//$condition = "username =" . "'" . $data['username'] . "' AND " . "password =" . "'" . $data['password'] . "'";
		$this->db->select('*');
		$this->db->from('usuarios');
		$this->db->where('username', $data['username']);
		$this->db->where('password', $data['password']);
		$this->db->limit(1);
		$query = $this->db->get();

		if ($query->num_rows() == 1) {
			return true;
		}
		else {
			return false;
		}
	}

	public function get($username) {
		//$condition = "username =" . "'" . $username . "'";
		$this->db->select('*');
		$this->db->from('usuarios');
		$this->db->where('username', $username);
		$this->db->limit(1);
		$query = $this->db->get();

		if ($query->num_rows() == 1) {
			return $query->result();
		}
		else {
			return false;
		}
	}

	public function try() {
		$return = FALSE;

		// Lee si hay usuario logeado
		if (!empty($_SESSION['usuario']['id'])) {
			// Busca si usuario se encuentra activo
			$this->db->select('*');
			$this->db->from('usuarios');
			$this->db->where('id', $_SESSION['usuario']['id']);
			$usuario = $this->db->get()->row_array();
			
			if ($usuario['active']) {
				
				//Actualiza admin y peril
				$_SESSION['usuario']['admin'] = ($usuario['id_grupo'] == 1 ? 1 : 0);
				$_SESSION['usuario']['perfil'] = $usuario['id_grupo'];

				// Si se encuentra activo retorna true
				$return = TRUE;
			}
			else {
				// Si no se encuentra activo mata sesión y retorna False
				unset($_SESSION['usuario']);
				delete_cookie('VentasDMG');
				return FALSE;
			}
		}
		// Busca cookie
		// Si existe crea session y regenera cookie
		elseif (!empty($this->input->cookie('VentasDMG'))) {
			// Decodificar la cookie
			$raw_cookie = $this->input->cookie('VentasDMG');
			$cookie_data = json_decode(base64_decode($raw_cookie), true);
		
			$username = isset($cookie_data['username']) ? $cookie_data['username'] : null;
		
			if ($username) {
				$result = $this->get($username);
		
				$session_data = array(
					'id' => $result[0]->id,
					'username' => $username,
					'ps_id' => $result[0]->ps_id,
					'alias' => $result[0]->alias,
					'admin' => $result[0]->id_grupo == 1,
					'perfil' => $result[0]->id_grupo
				);
		
				// Usar isset para aceptar valores 0 válidos
				if (isset($cookie_data['id_canal'])) {
					$session_data['id_canal'] = $cookie_data['id_canal'];
				}
		
				if (isset($cookie_data['id_punto_venta'])) {
					$session_data['id_punto_venta'] = $cookie_data['id_punto_venta'];
				}
		
				$_SESSION['usuario'] = $session_data;
		
				if (empty($_SESSION['usuario']['id'])) {
					unset($_SESSION['usuario']);
					$return = false;
				}
		
				// Guardar cookie actualizada
				$cookie_payload = array(
					'username' => $username
				);
		
				if (isset($_SESSION['usuario']['id_canal'])) {
					$cookie_payload['id_canal'] = $_SESSION['usuario']['id_canal'];
				}
		
				if (isset($_SESSION['usuario']['id_punto_venta'])) {
					$cookie_payload['id_punto_venta'] = $_SESSION['usuario']['id_punto_venta'];
				}
		
				$cookie = array(
					'name' => 'VentasDMG',
					'value' => base64_encode(json_encode($cookie_payload)),
					'expire' => 36000000,
				);
				$this->input->set_cookie($cookie);
		
				// Token
				if (!empty($this->input->cookie('token'))) {
					$token = $this->input->cookie('token');
					$_SESSION['token'] = $token;
		
					$tokenCookie = array(
						'name' => 'token',
						'value' => $token,
						'expire' => 36000000,
					);
					$this->input->set_cookie($tokenCookie);
				}
				$return = TRUE;
			}
		}

		// Si está logueado verificamos si hay seleccionado su ubicación
		if ($return) {
			$CI =& get_instance();
    		$CI->load->model('PuntoVenta_model');
			if (!isset($_SESSION['usuario']['id_canal'])) {
				//pr('No existe id_canal');
				$_SESSION['req_pv'] = true;
			} 
			elseif(!isset($_SESSION['usuario']['id_punto_venta'])) {
				//pr('No existe punto de venta');
				// Verificar si el canal tiene múltiples puntos de venta
				if ($this->PuntoVenta_model->tiene_multiples_puntos($_SESSION['usuario']['id_canal'])) {
					$_SESSION['req_pv'] = true;
				} else {
					// Asignar automáticamente el único punto de venta
					$pv = $this->PuntoVenta_model->get_punto_unico($_SESSION['usuario']['id_canal']);
					if (isset($pv->id)) {
						$_SESSION['usuario']['id_punto_venta'] = $pv->id;
					}
				}
			}
			if (isset($_SESSION['req_pv'])) {
				$canales = $this->PuntoVenta_model->lista_canales();
				$_SESSION['pv_canales'] = $canales['canales'];
				$_SESSION['pv_puntos'] = $canales['puntos_ventas'];
			}
		}

		$this->guarda_ingreso();

		return $return;
	}

	public function lista($activo = 0) {
		$this->db->select('id, alias');
		$this->db->from('usuarios');
		$this->db->where('deleted', 0);
		if ($activo == 1) {
			$this->db->where('active', 1);
		}
		$this->db->order_by('id', 'ASC');
		$query = $this->db->get();
		$usuarios = $query->result_array();

		$r = [];
		foreach ($usuarios as $u) {
			$r[$u['id']] = $u['alias'];
		}
		return $r;
	}

	public function guarda_ingreso() {
		if (!empty($_SESSION['usuario']['id'])) {
			
			$getEncode = !empty($_GET) ? json_encode($_GET) : '';
			$postEncode = !empty($_POST) ? json_encode($_POST) : '';

			$CI =& get_instance();
			$url = $CI->uri->uri_string();

			$excluidos = [
				'ventas/alertas',
				'clientes/ac_emails',
				'clientes/get_total_points',
				'productos/get_ps_image',
				'productos/ac_nombre'
			];

			if (!in_array($url, $excluidos)) {
				$log = [
					'id_usuario' => $_SESSION['usuario']['id'],
					'usuario_alias' => $_SESSION['usuario']['alias'],
					'url' => $url,
					'get_string' => $_SERVER['QUERY_STRING'],
					'get_data' => $getEncode,
					'post_data' => $postEncode
				];
				$this->db->insert('ingresos_log', $log);
			}
		}
	}

}