<?php

class Seguro_Model_TrocasCorretagemArquivos extends Agro_Db_Table_Abstract {
	protected $_schema = 'seguro';
	protected $_name = 'trocas_corretagem_arquivos';
	protected $_primary = 'id';

    const FILE_PATH = APPLICATION_PATH . '/upload_files/trocas_corretagem/';

	/**
	 * Inclui arquivos para a solicitação de troca de corretagem
	 * @param int $idTrocaCorretagem
	 */
	public function adicionarArquivos($idTrocaCorretagem)
	{
        $adapter = new Zend_File_Transfer_Adapter_Http();
        $adapter->setDestination(self::FILE_PATH);
        $adapter->addValidator('Extension', false, ['jfif', 'pdf', 'jpg', 'jpeg', 'png']);

        if (!$adapter->isValid()) {
            throw new Exception("Formato de arquivo inválido (formato aceito:  PDF, JPG, JPEG, PNG ou JFIF).");
        }

        $numeroArquivo = 1;
        $files = $adapter->getFileInfo();

        foreach ($files as $file) {
        	$nomeArquivo = $idTrocaCorretagem . "_". $numeroArquivo . "_" . time() . "_" . $file['name'];

        	if (!copy($file['tmp_name'], self::FILE_PATH . $nomeArquivo)) {
        		throw new Exception("Não foi possível copiar o arquivo {$file['name']} para a pasta.");
        	}
        	
        	$row = $this->createRow();
        	$row->id_troca_corretagem = $idTrocaCorretagem;
        	$row->ds_nome_arquivo = $nomeArquivo;
        	$row->ds_nome_original_arquivo = $file['name'];
        	
			if (!$row->save()) {
				unlink(realpath(self::FILE_PATH . $nomeArquivo));
				throw new Exception("Erro ao salvar o arquivo " . $file['name'] .".");
			}

        	$numeroArquivo++;
        }
	}

	/**
	 * Busca os documentos de uma solicitação de troca de corretagem
	 * @param int $idTrocaCorretagem
	 * @return array
	 */
	public function getByTrocaCorretagem($idTrocaCorretagem)
	{
		$select = $this->select()->setIntegrityCheck(false);
		$select->from(array('tca' => 'seguro.trocas_corretagem_arquivos'), "tca.*, to_char(tca.dt_criacao,'DD/MM/YYYY HH24:MI:SS') as dt_criacao_formatada");
		$select->join(array('u' => 'sistema.usuarios'), 'tca.id_usuario_criacao = u.id', 'ds_nome_usuario');
		$select->where("id_troca_corretagem={$idTrocaCorretagem}");
		
		return $this->fetchAll($select)->toArray();
	}

	public function delete($id, $field='id')
	{
        $row = $this->find($id)->current();

        if (!$row) {
            throw new Exception("Arquivo não encontrado.");
        }

        if (!parent::delete($id)) {
            throw new Exception("Erro ao deletar o arquivo.");
        }

        if (!unlink(realpath(self::FILE_PATH . $row->ds_nome_arquivo))) {
            throw new Exception("Erro ao deletar o arquivo do diretório.");
        }
    }
}
