<?php

class Seguro_Model_TiposBeneficiarios extends Agro_Db_Table_Abstract
{
    const ID_COOPERATIVA = 1;
    const ID_LTDA = 2;
    const ID_PESSOA_FISICA = 3;
    const ID_PRODUTOR_RURAL = 4;
    const ID_SA = 5;

    protected $_schema = 'seguro';
    protected $_name = 'tipos_beneficiarios';
    protected $_primary = 'id';
    public $_order = 'ds_tipo';

    public static function getArquivosByTipoBeneficiario(int $idTipoBeneficiario)
    {
        $documentos = [
            self::ID_COOPERATIVA => [
                Sistema_Model_TipoArquivoProcesso::CNPJ,
                Sistema_Model_TipoArquivoProcesso::COMPROVANTE_ENDERECO,
                Sistema_Model_TipoArquivoProcesso::DADOS_BANCARIOS,
                Sistema_Model_TipoArquivoProcesso::ELEICAO_DIRETORIA,
                Sistema_Model_TipoArquivoProcesso::ESTATUTO_SOCIAL,
                Sistema_Model_TipoArquivoProcesso::OUTROS
            ],
            self::ID_LTDA => [
                Sistema_Model_TipoArquivoProcesso::CNPJ,
                Sistema_Model_TipoArquivoProcesso::COMPROVANTE_ENDERECO,
                Sistema_Model_TipoArquivoProcesso::CONTRATO_SOCIAL,
                Sistema_Model_TipoArquivoProcesso::DADOS_BANCARIOS,
                Sistema_Model_TipoArquivoProcesso::OUTROS
            ],
            self::ID_PESSOA_FISICA => [
                Sistema_Model_TipoArquivoProcesso::CNH,
                Sistema_Model_TipoArquivoProcesso::COMPROVANTE_ENDERECO,
                Sistema_Model_TipoArquivoProcesso::CPF,
                Sistema_Model_TipoArquivoProcesso::DADOS_BANCARIOS,
                Sistema_Model_TipoArquivoProcesso::DECLARACOES,
                Sistema_Model_TipoArquivoProcesso::OUTROS,
                Sistema_Model_TipoArquivoProcesso::RETIFICACAO_ENDERECO,
                Sistema_Model_TipoArquivoProcesso::RG
            ],
            self::ID_PRODUTOR_RURAL => [
                Sistema_Model_TipoArquivoProcesso::CNPJ,
                Sistema_Model_TipoArquivoProcesso::COMPROVANTE_ENDERECO,
                Sistema_Model_TipoArquivoProcesso::CONTRATO_SOCIAL,
                Sistema_Model_TipoArquivoProcesso::DADOS_BANCARIOS,
                Sistema_Model_TipoArquivoProcesso::OUTROS,
                Sistema_Model_TipoArquivoProcesso::CADESP
            ],
            self::ID_SA => [
                Sistema_Model_TipoArquivoProcesso::CNPJ,
                Sistema_Model_TipoArquivoProcesso::COMPROVANTE_ENDERECO,
                Sistema_Model_TipoArquivoProcesso::DADOS_BANCARIOS,
                Sistema_Model_TipoArquivoProcesso::ELEICAO_DIRETORIA,
                Sistema_Model_TipoArquivoProcesso::ESTATUTO_SOCIAL,
                Sistema_Model_TipoArquivoProcesso::OUTROS
            ]
        ];

        return $documentos[$idTipoBeneficiario];
    }

    /**
     * @param Zend_Db_Table_Row $beneficiario
     * @param bool $validarStatusLiquidacao
     * @return array
     */
    public static function getArquivosObrigatoriosByBeneficiario(Zend_Db_Table_Row $beneficiario, bool $validarStatusLiquidacao = true) : array
    {
        if ($validarStatusLiquidacao) {
            // O sistema deverá validar apenas propostas da safra atual;
            // Propostas com o status "Indenização Paga" não deverão ser consideradas para apresentar pendência.
            $propostasBeneficiarios = new Seguro_Model_PropostasBeneficiarios();
            $estados = $propostasBeneficiarios->getEstadosByCpfCnpj($beneficiario['cpf_cnpj']);

            if (empty($estados)) {
                return array();
            }
        }

        $documentosObrigatorios = self::getArquivosByTipoBeneficiario($beneficiario['id_tipo_beneficiario']);

        if (($key = array_search(Sistema_Model_TipoArquivoProcesso::OUTROS, $documentosObrigatorios)) !== false) {
            unset($documentosObrigatorios[$key]);
        }

        if ($beneficiario['id_tipo_beneficiario'] == self::ID_PRODUTOR_RURAL && !in_array('SP', $estados)) {
            if (($key = array_search(Sistema_Model_TipoArquivoProcesso::CADESP, $documentosObrigatorios)) !== false) {
                unset($documentosObrigatorios[$key]);
            }
        }

        if ($beneficiario['id_tipo_beneficiario'] == self::ID_PESSOA_FISICA) {

            if (($key = array_search(Sistema_Model_TipoArquivoProcesso::DECLARACOES, $documentosObrigatorios)) !== false) {
                unset($documentosObrigatorios[$key]);
            }

            if (($key = array_search(Sistema_Model_TipoArquivoProcesso::RETIFICACAO_ENDERECO, $documentosObrigatorios)) !== false) {
                unset($documentosObrigatorios[$key]);
            }
        }

        return $documentosObrigatorios;
    }
}
