<?php

class Sistema_BancoController extends Agro_Controller_Action {
    public $_columnList = array(
        'nr_banco' => 'Nr. Banco',
        'ds_nome_banco' => 'Banco'
    );

    public function init() {
         $this->view->title = 'Sistema » Configurações » Bancos';
    }

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

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

    public function getFilter() {
        $where = array();

        if ($this->getRequest()->getParam('ds_nome_banco')) {
            $where[] = array(
                'field' => 'ds_nome_banco',
                'operator' => 'ilike',
                'value' => '%'.$this->getRequest()->getParam('ds_nome_banco').'%'
            );
        }

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

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

        return $where;
    }

    public function validardigitoverificadorAction()
    {
        $this->isAjax();
        $parametros = $this->getRequest()->getParams();
        $retorno = ['erro' => false, 'mensagem' => ''];

        try {
            if (empty((int)$parametros['numeroAgencia'])) {
                throw new Exception('Número de Agência inválido.');
            }

            if (array_key_exists('numeroConta', $parametros) && empty((int)$parametros['numeroConta'])) {
                throw new Exception('Número da conta inválido.');
            }

            $numeroAgencia = trim($parametros['numeroAgencia']);
            $digitoAgencia = $parametros['digitoAgencia'] ? trim($parametros['digitoAgencia']) : '';
            $numeroConta = $parametros['numeroConta'] ? trim($parametros['numeroConta']) : '';
            $digitoConta = isset($parametros['digitoConta']) ? trim($parametros['digitoConta']) : '';

            $rowBanco = $this->getModel()->getRow($parametros['idBanco']);

            if (empty($rowBanco['id'])) {
                throw new Exception('Banco inválido.');
            }

            $numeroBanco = str_pad($rowBanco['nr_banco'], 3, '0', STR_PAD_LEFT);
            $banco = Agro_Utils_Bancos_Factory::getBanco($numeroBanco, $numeroAgencia, $numeroConta);

            if (!empty($banco)) {
                if (!$banco->digitoVerificadorAgenciaValido($digitoAgencia)) {
                    throw new Exception('Dígito verificador da agência inválido.');
                }

                if (!empty($numeroConta) && !$banco->digitoVerificadorContaValido($digitoConta)) {
                    throw new Exception('Dígito verificador da conta inválido.');
                }
            }
        } catch (Exception $erro) {
            $retorno['erro'] = true;
            $retorno['mensagem'] = $erro->getMessage();
        }

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