<?php

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

class Docs_model extends CI_Model {

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

    /**
     * Função para armazenar Arquivos, Certificados, Históricos Acadêmicos...
     *
     * @param Strig $url_arquivo URL para o Arquivo PDF que deve ser armazenado
     *
     * @param String $identificador Código para autenticação do arquivo
     *
     * @param Array $usuario {Opcional} Array com informações do usuário <br>
     * $usuario['id'] Id do usuário {Opcional} <br>
     * $usuário['nome'] Nome do usuário {Opcional} <br>
     * $usuario['uf'] UF do Estado do usuário {Opcional} <br>
     *
     * @param int $tipo_arquivo {Opcional} Define o tipo do arquivo que esta sendo enviado <br>
     * $tipo_arquivo = 1 Arquivo de Certificado <br>
     * $tipo_arquivo = 2 Arquivo de Etiqueta <br>
     * $tipo_arquivo = 4 Documento Geral para arquivamento {Default} <br>
     *
     * @param int $processar {Opcional} Indica se o arquivo deve ser enviado <br>
     * $processar = 0 Não Processar {Default} <br>
     * $processar = 1 Processar <br>
     *
     * @return Array Retorno direto OvumDocs
     */
    public function salvar(
            String $url_arquivo,
            String $identificador,
            String $descricao,
            $usuario = array("id" => "", "nome" => "", "uf" => ""),
            $tipo_arquivo = 1,
            $processar = 0
    ) {
        $post = array();
        if (!empty($usuario)) {
            if (!empty($usuario['id']) && (is_numeric($usuario['id']) || is_string($usuario['id'])))
                $post['destinatario']['id'] = $usuario['id'];
            if (!empty($usuario['nome']) && is_string($usuario['nome']))
                $post['destinatario']['nome'] = $usuario['nome'];
            if (!empty($usuario['uf']) && is_string($usuario['uf']))
                $post['destinatario']['uf'] = $usuario['uf'];
        }
        $post['arquivo'] = array(// ARQUIVO '0'
            '0' => array('id_arquivo' => $identificador, 'url' => $url_arquivo,'descricao' => $descricao, 'tipo' => $tipo_arquivo, 'processar' => $processar)
        );

        $request = $this->request('salvar', $post);

        return (!empty($request[0])) ? $request[0] : $request;
    }

    /**
     * Função para armazenar Arquivos, Certificados, Históricos Acadêmicos...
     *
     * @param Array $lote Deve conter os dados dos arquivos para armazenamento: <br>
     *   $lote[]["identificador"] Código para auutenticação do arquivo <br>
     *   $lote[]["url"] URL para o Arquivo PDF que deve ser armazenado <br>
     *   $lote[]["tipo"] Define o tipo do arquivo que esta sendo enviado <br>
     *      4=Documento Geral para arquivamento {Default} <br>
     *      1=Arquivo de Certificado <br>
     *      2=Arquivo de Etiqueta <br>
     *   $lote[]["processar"] Indica se o arquivo deve ser enviado {Opcional} <br>
     *      0=Não Processar {Default} <br>
     *      1=Processar <br>
     *
     * @param Array $usuario {Opcional} Array com informações do usuário <br>
     * $usuario['id'] Id do usuário {Opcional} <br>
     * $usuário['nome'] Nome do usuário {Opcional} <br>
     * $usuario['uf'] UF do Estado do usuário {Opcional} <br>
     *
     * @return Array Retorno direto OvumDocs
     */
    public function salvar_lote(
            $lote = array(array('identificador' => "", 'url' => "", 'tipo' => "", 'processar' => "")),
            $usuario = array("id" => "", "nome" => "", "uf" => "")
    ) {

        $post = array();

        if (!empty($usuario)) {
            if (!empty($usuario['id']) && (is_numeric($usuario['id']) || is_string($usuario['id'])))
                $post['destinatario']['id'] = $usuario['id'];
            if (!empty($usuario['nome']) && is_string($usuario['nome']))
                $post['destinatario']['nome'] = $usuario['nome'];
            if (!empty($usuario['uf']) && is_string($usuario['uf']))
                $post['destinatario']['uf'] = $usuario['uf'];
        }

        if (!is_array($lote)) {
            return false;
        }

        $post['arquivo'] = array();

        foreach ($lote as $key => $a) {
            //Identificador {Obrigatório}
            if (!empty($a["identificador"]) && (is_numeric($a["identificador"]) || is_string($a["identificador"]))) {
                $post['arquivo'][$key]["id_arquivo"] = $a["identificador"];
            } else {
                return false;
            }

            //URL {Obrigatório}
            if (!empty($a["url"]) && is_string($a["url"])) {
                $post['arquivo'][$key]["url"] = $a["url"];
            } else {
                return false;
            }

            //Tipo {Opcional} default=4
            if (!empty($a["tipo"]) && is_numeric($a["tipo"]) && in_array($a["tipo"], array(1, 2, 4))) {
                $post['arquivo'][$key]["tipo"] = $a["tipo"];
            } else {
                $post['arquivo'][$key]["tipo"] = 4;
            }

            // "processar" {Opcional} default=0
            if (!empty($a["processar"]) && is_numeric($a["processar"]) && in_array($a["processar"], array(0, 1))) {
                $post['arquivo'][$key]["processar"] = $a["processar"];
            } else {
                $post['arquivo'][$key]["processar"] = 0;
            }
        }

        $request = $this->request('salvar', $post);

        return $request;
    }

    /**
     * Função para recuperar informações e acesso ao arquivo armazenado
     *
     * @param String $identificador Código de identificação do arquivo
     * @return Array Retorno direto OvumDocs
     */
    public function recuperar($identificador) {
        return $this->request('buscar', array('id_arquivo' => $identificador));
    }

    /**
     * Objeto padrão de requisição (POST)
     *
     * @param String $function URI da Função
     * @param array $post Parâmetros de envio (sem campo [auth])
     * @return array
     */
    private function request($function, $post) {
        $post['auth'] = array('chave' => DOCS_CHAVE, 'token' => DOCS_TOKEN);
        $ch = curl_init(DOCS_URL_NEW . $function);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        $requisicao = curl_exec($ch);
        
        curl_close($ch);
        return (!empty(json_decode($requisicao, true))) ? json_decode($requisicao, true) : $requisicao;
    }

}
