<?php

class Seguro_Model_BeneficiariosArquivos extends Agro_Db_Table_Abstract {
	protected $_schema = 'seguro';
	protected $_name = 'beneficiarios_arquivos';
	protected $_primary = 'id';
	public $_order = 'id asc';

	public function save($data) {
		try {
			$Row = $this->createRow();

			$Row->id_tipo_arquivo = $data['id_tipo_arquivo'];
			$Row->ds_nome_arquivo = $data['arquivo'];
			$Row->id_beneficiario = $data['id_beneficiario'];

			if (array_key_exists('fl_arquivo_reaproveitado', $data)) {
			    $Row->fl_arquivo_reaproveitado = $data['fl_arquivo_reaproveitado'] ? 'true' : 'false';
            }

            if (array_key_exists('fl_vigencia_atual', $data)) {
                $Row->fl_vigencia_atual = $data['fl_vigencia_atual'];
            }

			$modelBeneficiariosPendenciasArquivos = new Seguro_Model_BeneficiariosPendenciasArquivos();
			$modelBeneficiariosPendenciasArquivos->deleteByBeneficiarioTipoArquivo($data['id_beneficiario'], $data['id_tipo_arquivo']);

            $save = $Row->save();

            (new Seguro_Model_Beneficiarios())->atualizarDataDocumentoVigenciaAtual((int) $data['id_beneficiario']);

			return $save;
		} catch (Exception $e) {
		    $this->setMessage($e->getMessage());
			return false;
		}
	}

	public function getArquivos($idBeneficiario, $ano = '') {
        $campos = [
            'ba.id',
            'ba.id_beneficiario',
            'ba.id_tipo_arquivo',
            'ba.ds_nome_arquivo',
            "to_char(ba.dt_criacao,'dd/mm/yyyy') as dt_criacao",
            'ba.fl_conferido',
            'ba.fl_transmitido_seguradora',
            'ba.fl_arquivo_reaproveitado',
            'ba.fl_vigencia_atual',
            's.ds_tipo_arquivo',
            's.ds_chave_tipo_arquivo',
        ];

		$Select = $this->select()->setIntegrityCheck(false);
		$Select->from(array('ba' => 'seguro.beneficiarios_arquivos'), $campos);
		$Select->join(array('s' => 'sistema.tipo_arquivo_processo'), 's.id = ba.id_tipo_arquivo', false);
		$Select->where('ba.id_beneficiario = ?', $idBeneficiario);
		$Select->where('ba.fl_ativo = true');

		if (!empty($ano)) {
            $Select->where("to_char(ba.dt_criacao, 'YYYY') = '{$ano}'");
        }

		$Select->order('ba.dt_criacao desc');

		$Row = $this->fetchAll($Select);

		if($Row){
		    return $Row->toArray();
		}
		return;
	}

	public function getCountTipoArquivo($idBeneficiario, $idTipoArquivo){
		$select = $this->select();
		$select->from(array('a'=>'seguro.beneficiarios_arquivos'));
		$select->where('id_beneficiario = ?', $idBeneficiario);
		$select->where('id_tipo_arquivo = ?', $idTipoArquivo);
		return $this->fetchAll($select)->count();
	}

	public function getArquivosVigenciaAtual(int $idBeneficiario, array $tiposArquivos = [])
    {
        $campos = [
            'ba.id',
            'ba.id_beneficiario',
            'ba.id_tipo_arquivo',
            'ba.ds_nome_arquivo',
            "to_char(ba.dt_criacao,'dd/mm/yyyy') as dt_criacao",
            'ba.fl_conferido',
            'ba.fl_transmitido_seguradora',
            'ba.fl_arquivo_reaproveitado',
            's.ds_tipo_arquivo',
            'sb.cpf_cnpj',
        ];

        $select = $this->select()->setIntegrityCheck(false);
        $select->from(['ba' => 'seguro.beneficiarios_arquivos'], $campos);
        $select->join(array('s' => 'sistema.tipo_arquivo_processo'), 's.id = ba.id_tipo_arquivo', false);
        $select->join(['sb' => 'seguro.beneficiarios'], 'sb.id = ba.id_beneficiario', false);
        $select->where('ba.id_beneficiario = ?', $idBeneficiario);
        $select->where('ba.fl_ativo = true');
        $select->where("ba.fl_vigencia_atual is true");

        if (!empty($tiposArquivos)) {
            $select->where('ba.id_tipo_arquivo in (' . implode(', ', $tiposArquivos) . ')');
        }

        $select->order('ba.dt_criacao asc');

        return $this->fetchAll($select);
    }

    public function limparVigenciaAtualBeneficiario(int $idBeneficiario)
    {
        $this->_db->query("UPDATE seguro.beneficiarios_arquivos SET fl_vigencia_atual = 'f' WHERE id_beneficiario = {$idBeneficiario}");
    }
}
