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

class Tareas extends CI_Controller {

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

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

    /**
     * Muestra la lista de tareas. Por defecto muestra las tareas pendientes
     * del usuario activo, pero permite filtros
     */
    public function index() {
        $data['estado'] = $filtros['id_estado_tarea'] = $this->input->get('estado') ?? -1;
        // Si no se define responsable se mostrarán las tareas del usuario activo
        $data['responsable'] = $filtros['id_responsable'] = $this->input->get('responsable') ?? $_SESSION['usuario']['id'];
        // Si no se define solicitante se mostrarán todos
        $data['solicitante'] = $filtros['id_solicitante'] = $this->input->get('solicitante') ?? 0;
		//Filtra porque el solicitante no sea el usuario logueado
		$filtros['tipo_tarea'] = '1';

        $data['tareas'] = $this->Tarea->listado($filtros);
        $data = $this->Tarea->datos_globales($data);

        $data['filtrosEstados'] = ['-1' => 'En Curso', '0' => 'Todas'];
        $data['filtrosEstados'] += $data['estadosTareas'];

        $data['usuariosActivos'] = ['0' => 'Todos'] + $data['usuariosActivos'];

        $data['prioridades'] = [
            0 => 'Sin Prioridad Asignada',
            1 => 'Alta',
            2 => 'Media',
            3 => 'Baja',
            4 => 'Muy Baja'
        ];

        $data['title'] = 'Tareas';
        $data['content'] = $this->load->view('tareas/index', $data , true);
        $this->load->view('default', $data);
    }

    /**
     * Muestra la lista de tareas creadas por el usuario. Por defecto muestra las solicitudes pendientes
     * del usuario activo, pero permite filtros
     */
    public function solicitudes() {
        $data['estado'] = $filtros['id_estado_tarea'] = $_GET['estado'] ?? -1;
        // Si no se define responsable se mostrarán todos
        $data['responsable'] = $filtros['id_responsable'] = $_GET['responsable'] ?? 0;
        // Si no se define solicitante se mostrarán las solicitudes del usuario Activo
        $data['solicitante'] = $filtros['id_solicitante'] = $this->input->get('solicitante') ?? $_SESSION['usuario']['id'];
		//Filtra porque el responsable no sea el usuairo logueado
		$filtros['tipo_tarea'] = '2';

        $data['tareas'] = $this->Tarea->listado($filtros);
        $data = $this->Tarea->datos_globales($data);

        $data['filtrosEstados'] = ['-1' => 'En Curso', '0' => 'Todas'];
        $data['filtrosEstados'] += $data['estadosTareas'];

        $data['usuariosActivos'] = ['0' => 'Todos'] + $data['usuariosActivos'];

        $data['prioridades'] = [
            0 => 'Sin Prioridad Asignada',
            1 => 'Alta',
            2 => 'Media',
            3 => 'Baja',
            4 => 'Muy Baja'
        ];

        $data['title'] = 'Solicitudes';
        $data['content'] = $this->load->view('tareas/index', $data , true);
        $this->load->view('default', $data);
    }

	/**
     * Muestra la lista de tareas creadas por el usuario.
     */
    public function autotareas() {
        $data['estado'] = $filtros['id_estado_tarea'] = $_GET['estado'] ?? -1;
        // Si no se define responsable se mostrarán todos
        $data['responsable'] = $filtros['id_responsable'] = $_GET['responsable'] ?? 0;
        // Si no se define solicitante se mostrarán las solicitudes del usuario Activo
        $data['solicitante'] = $filtros['id_solicitante'] = $this->input->get('solicitante') ?? $_SESSION['usuario']['id'];
		//Filtra por que el solicitante y responsable sean el usuario logueado
		$filtros['tipo_tarea'] = '3';

        $data['tareas'] = $this->Tarea->listado($filtros);
        $data = $this->Tarea->datos_globales($data);

        $data['filtrosEstados'] = ['-1' => 'En Curso', '0' => 'Todas'];
        $data['filtrosEstados'] += $data['estadosTareas'];

        $data['usuariosActivos'] = ['0' => 'Todos'] + $data['usuariosActivos'];

        $data['prioridades'] = [
            0 => 'Sin Prioridad Asignada',
            1 => 'Alta',
            2 => 'Media',
            3 => 'Baja',
            4 => 'Muy Baja'
        ];

        $data['title'] = 'Solicitudes';
        $data['content'] = $this->load->view('tareas/index', $data , true);
        $this->load->view('default', $data);
    }

    /**
     * Muestra toda la información de la tarea y sus comentarios
     * Permite cambiar el estado al solicitante y responsable (solo hasta "En Validación")
     * Permite editar al solicitante (en modal)
     * Permite comentar a cualquiera
     * @param $id int id de la tarea, si no viene se redirige a index
     * @since 10/10/2022
     */
    public function detalle ($id = null) {
        if (empty($id)) {
            redirect('/tareas');
        }

		$link = base_url('tareas/detalle/' . $id);

		$this->load->model('Notificacion_model');
		$this->Notificacion_model->marcar_leidas_por_link($link);

        $data['tarea'] = $this->Tarea->info($id);
        $data = $this->Tarea->datos_globales($data);

        $data['prioridades'] = [
            0 => 'Sin Prioridad Asignada',
            1 => 'Alta',
            2 => 'Media',
            3 => 'Baja',
            4 => 'Muy Baja'
        ];

        $data['title'] = 'Tarea';
        $data['content'] = $this->load->view('tareas/detalle', $data , true);
        $this->load->view('default', $data);
    }


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

    /**
     * Retorna la información de una tarea por json
     */
    public function info() {
        // Si no se recibe un id retorna error
        if ($this->input->post_get('id')) {
            $result['tarea'] = $this->Tarea->info($this->input->post_get('id'));
            $result['status'] = 'success';
            /* C: 01/11/2022
            $result['tarea']['eliminar'] = false;
            if ($_SESSION['usuario']['admin'] ||
                $result['tarea']['id_solicitante'] == $_SESSION['usuario']['id']
            ) {

            }
            */
        }
        else {
            $result['status'] = 'error';
            $result['message'] = 'No se recibe id de tarea';
        }

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

    /**
     * Guarda datos de una tarea nueva o editada
     */
    public function guardar() {
        if (!empty($this->input->post())) {
            if (empty($this->input->post('titulo'))) {
                $errors[] = 'Debes indicar el título';
            }
            if (empty($this->input->post('id_responsable'))) {
                $errors[] = 'Debes seleccionar un usuario asignado';
            }

            if (empty($errors)) {
                $data = $this->input->post();
                if (empty($data['id'])) {
                    $data['id_solicitante'] = $_SESSION['usuario']['id'];
                }
                $result['id'] = $this->Tarea->guardar($data);
                $result['status'] = 'success';
            } else {
                // Retornar error
                $result['status'] = 'error';
                $result['message'] = implode('<br />', $errors);
            }

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

    /**
     * Guarda cambio de estado de una tarea
     */
    public function cambia_estado() {
        if ($this->input->post('id') && $this->input->post('id_estado')) {
            $data['id'] = $this->input->post('id');
            $data['id_estado_tarea'] = $this->input->post('id_estado');

            $result['id'] = $this->Tarea->guardar($data);
            $result['status'] = 'success';
        } else {
            // Retornar error
            $result['status'] = 'error';
            $result['message'] = 'No se recibieron los datos necesarios';
        }

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

    /**
     * Elimina la tarea indicada
     */
    public function eliminar() {
        if ($this->input->post('id')) {
            $data['id'] = $this->input->post('id');
            $data['deleted'] = 1;

            $result['id'] = $this->Tarea->guardar($data);
            $result['status'] = 'success';
        } else {
            // Retornar error
            $result['status'] = 'error';
            $result['message'] = 'No se recibieron los datos necesarios';
        }

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

    /**
     * Agrega un comentario a la tarea indicada
     */
    public function comentar() {
        if ($this->input->post('id_tarea')) {
            $data['id_tarea'] = $this->input->post('id_tarea');
            $data['comentario'] = $this->input->post('comentario');
            $result = $this->Tarea->comentar($data);
            $result['status'] = 'success';
        } else {
            // Retornar error
            $result['status'] = 'error';
            $result['message'] = 'No se recibieron los datos necesarios';
        }

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

    /**
     * Carga Imagen desde tinymce
     * Tamaño máximo 800x800, si es mayor redimensiona
     */
    public function cargar_imagen() {
        $imageInfo = getimagesize($_FILES['file']['tmp_name']);
        $mime = $imageInfo['mime'];

        $subidas = 'img/subidas/tareas/' . date('Ym') . '/';
        if (!file_exists(FCPATH . 'img/subidas/tareas/' . date('Ym'))) {
            mkdir(FCPATH . 'img/subidas/tareas/' . date('Ym'), 0777, true);
        }

        $archivo = FCPATH . $subidas . basename($_FILES['file']['name']);

        $imagenFinal = resize_image($_FILES['file']['tmp_name'], 1200, 1200);
        $archivoFinal = save_image($imagenFinal, $archivo, $mime);

        if ($archivoFinal) {
            $result['location'] = str_replace(FCPATH, '', $archivoFinal);
        } else {
            $result['error'] = 'error';
        }

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