<?php
class Anuncio_model extends CI_Model {

	/**
	 * Entrega una lista de todos los anuncios mostrando cuales han sido leídos
	 * @param $filtros filtra por usuario, estado
	 */
	public function listado($id_usuario) {
		$this->db->select('a.id, a.id_usuario, a.titulo, a.contenido, a.created, au.fecha_lectura');
		$this->db->from('anuncios a');
		$this->db->join('anuncios_usuarios au', 'ON au.id_anuncio = a.id AND au.id_usuario = ' . $id_usuario . ' AND au.deleted = 0', 'left');
		$this->db->where('a.deleted', 0);
		$this->db->order_by('a.created', 'DESC');
		return $this->db->get()->result_array();
	}


	/**<
	 * Entrega toda la informacion de un anuncio
	 * @param $id id del anuncio que se solicita
	 */
	public function info($id = null) {
		$this->db->select('*');
		$this->db->from('anuncios');
		$this->db->where('id', $id);
		$this->db->where('deleted', 0);
		$anuncio = $this->db->get()->row_array();

		//Busca usuarios
		$this->db->select('u.id, u.alias, u.active');
		$this->db->from('usuarios u');
		$this->db->where('u.deleted', 0);
		$this->db->order_by('u.alias', 'ASC');
		$usuarios = $this->db->get()->result_array();

		//Busca lecturas del anuncio
		$this->db->select('au.id, au.id_usuario, au.created, au.fecha_lectura');
		$this->db->from('anuncios_usuarios au');
		$this->db->where('au.id_anuncio', $anuncio['id']);
		$this->db->where('au.deleted', 0);
		$this->db->order_by('au.id', 'ASC');
		$lectores = $this->db->get()->result_array();

		$vistas = [];

		foreach ($usuarios as $usuario) {
			$usuario['fecha_visto'] = '';
			$usuario['fecha_lectura'] = '';
			$usuario['estado'] = 0;

			foreach($lectores as $lector) {
				if ($usuario['id'] == $lector['id_usuario']) {
					$usuario['fecha_visto'] = $lector['created'];
					$usuario['estado'] = 1;
					if (isDate($lector['fecha_lectura'])) {
						$usuario['fecha_lectura'] = $lector['fecha_lectura'];
						$usuario['estado'] = 2;
					}
				}
			}

			if ($usuario['active'] == 1 || !empty($usuario['fecha_visto'])) {
				$vistas[] = $usuario;
			}
		}
		$anuncio['lectores'] = $vistas;

		return $anuncio;
	}


	/**
	 * Guardar datos de un nuevo anuncio o edición
	 * 
	 * 
	 */
	public function guardar($data) {
		//revisar si viene id y si viene se hace update
		if (empty($data['id'])) {
			//$data['created'] = date('Y-m-d H:i:s');
			$this->db->insert('anuncios', $data);
			$return['id_anuncio'] = $this->db->insert_id();
		}
		else {
			$this->db->where('id', $data['id']);
			$this->db->update('anuncios', $data);
			$return['id_anuncio'] = $data['id'];
		}
		$return['status'] = 'success';
		return $return;
	}


	public function ver($data) {
		//revisar si viene id_anuncio y id_usuario
		if (!empty($data['id_anuncio']) && !empty($data['id_usuario'])) {
			// Busca anuncio
			$this->db->select('*');
			$this->db->from('anuncios');
			$this->db->where('id', $data['id_anuncio']);
			$this->db->where('deleted', 0);
			$anuncio = $this->db->get()->row_array();

			// Busca si existe registro
			$this->db->select('*');
			$this->db->from('anuncios_usuarios');
			$this->db->where('id_anuncio', $data['id_anuncio']);
			$this->db->where('id_usuario', $data['id_usuario']);
			$this->db->where('deleted', 0);
			$anuncioUsuario = $this->db->get()->row_array();

			if (!empty($anuncioUsuario)) {
				$return['id_anuncio_usuario'] = $anuncioUsuario['id'];
				$return['fecha_lectura']  = $anuncioUsuario['fecha_lectura'];
			}
			else {
				if ($data['id_usuario'] == $anuncio['id_usuario']) {
					$data['fecha_lectura'] = date('Y-m-d H:i:s');
				}

				$this->db->insert('anuncios_usuarios', $data);
				$return['id_anuncio_usuario'] = $this->db->insert_id();
				$return['fecha_lectura'] = $data['fecha_lectura'];
			}
		}
		else {
			// Error: sin datos
		}
		$return['status'] = 'success';
		return $return;
	}

	/**
	 * Guarda lectura de usuario
	 */
	public function leer($data) {
		//revisar si viene id_anuncio y id_usuario
		if (!empty($data['id_anuncio']) && !empty($data['id_usuario'])) {

			// Busca si existe registro
			$this->db->select('*');
			$this->db->from('anuncios_usuarios');
			$this->db->where('id_anuncio', $data['id_anuncio']);
			$this->db->where('id_usuario', $data['id_usuario']);
			$this->db->where('deleted', 0);
			$anuncioUsuario = $this->db->get()->row_array();
			$ahora = date('Y-m-d H:i:s');

			if (!empty($anuncioUsuario)) {
				$nuevoAnuncioUsuario['fecha_lectura'] = $ahora;;

				$this->db->where('id_anuncio', $data['id_anuncio']);
				$this->db->where('id_usuario', $data['id_usuario']);
				$this->db->update('anuncios_usuarios', $nuevoAnuncioUsuario);
			}
			else {
				$data['fecha_lectura'] = $ahora;
				$this->db->insert('anuncios_usuarios', $data);
			}
		}
		else {
			// Error: sin datos
		}
		$return['status'] = 'success';
		return $return;
	}


	public function datos_globales($data) {
		$data['usuariosActivos'] = $this->Usuario->lista(1);
		$data['usuarios'] = $this->Usuario->lista();
		return $data;
	}


	public function pendientes() {
		if (!empty($_SESSION['usuario']['id'])) {
			$this->db->select('a.id, a.id_usuario, a.titulo, a.contenido, a.created, au.fecha_lectura');
			$this->db->from('anuncios a');
			$this->db->join('anuncios_usuarios au', 'ON au.id_anuncio = a.id AND au.deleted = 0 AND au.id_usuario = ' . $_SESSION['usuario']['id'], 'left');
			$this->db->where('a.id_usuario !=', $_SESSION['usuario']['id']);
			$this->db->where('a.deleted', 0);

			$this->db->group_start();
				$this->db->where('au.fecha_lectura','0000-00-00 00:00:00');
				$this->db->or_where('au.fecha_lectura IS NULL');
			$this->db->group_end();

			$anuncios = $this->db->get()->result_array();

			//pr($this->db->last_query());

			$_SESSION['anuncios'] = count($anuncios);
		}
	}
}