<?php

class Sinistro2_ValorlitrocombustivelController extends Agro_Controller_Action
{
    public function importarAction()
    {
        $this->isAjax();

        $retorno = ['erro' => false, 'mensagem' => 'Importação realizada com sucesso.'];
        $registros = [];

        $Adapter = new Zend_File_Transfer_Adapter_Http();
        $Adapter->setDestination(APPLICATION_PATH . '/upload_files/temp/');
        $Adapter->addValidator('Extension', false, ['csv']);

        $file = $Adapter->getFileInfo();
        $nomeArquivo = $file['valorcombustivel']['name'];

        if (!$Adapter->isValid()) {
            $retorno = [
              'erro'     => true,
              'mensagem' => 'Formato de arquivo inválido (formato aceito: .csv).'
            ];

            $this->getResponse()->setBody(Zend_Json::encode($retorno));

            return false;
        }

        if (!$Adapter->receive($nomeArquivo)) {
            $retorno = ['erro' => true, 'mensagem' => 'Erro ao receber o arquivo de importação.'];

            $this->getResponse()->setBody(Zend_Json::encode($retorno));

            return false;
        }

        $arquivo = fopen(APPLICATION_PATH . '/upload_files/temp/' . $nomeArquivo, 'r');

        while (($dados = fgetcsv($arquivo, 0, ';')) != false) {
            if (count($dados) !== 3) {
                $mensagem = "Importação inválida. O arquivo deve conter 3 colunas com os cabeçalhos/dados na seguinte ordem:";
                $mensagem .= "\n1ª - UF";
                $mensagem .= "\n2ª - Valor";
                $mensagem .= "\n3ª - Data_Inicio";

                $retorno = ['erro' => true, 'mensagem' => $mensagem];

                $this->getResponse()->setBody(Zend_Json::encode($retorno));

                return false;
            }

            array_push($registros, ['uf' => $dados[0], 'valor' => $dados[1], 'data_inicio' => $dados[2]]);
        }

        Agro_Db_Table_Abstract::getDefaultAdapter()->beginTransaction();
        try {
            array_shift($registros);

            foreach ($registros as $registro) {
                $registro['id_estado'] = (new Sistema_Model_Estados())->getId($registro['uf']);
                $this->getModel()->save($registro);
            }

            Agro_Db_Table_Abstract::getDefaultAdapter()->commit();
        } catch (Exception $erro) {
            $retorno = ['erro' => true, 'mensagem' => 'Erro ao importar os valores de combustívels.'];

            Agro_Db_Table_Abstract::getDefaultAdapter()->rollback();
        }

        unlink($arquivo);

        $this->getResponse()->setBody(Zend_Json::encode($retorno));

        return true;
    }

    public function getFilter()
    {
        $where = [];

        if ($this->getRequest()->getParam('id_estado')) {
            $where[] = [
              'field'    => 'id_estado',
              'operator' => '=',
              'value'    => $this->getRequest()->getParam('id_estado')
            ];
        }

        return $where;
    }

    public function getForm()
    {
        return new Sinistro2_Form_ValorLitroCombustivel();
    }

    public function getModel()
    {
        return new Sinistro2_Model_ValorLitroCombustivel();
    }

    public function init()
    {
        $this->view->title = 'Sinistro » Cobrança » Cobrança Essor » Configurações » Valor Litro Combustível';
    }

    public function setBack()
    {
        $this->view->back = '/sinistro2/valorlitrocombustivel';
    }
}
