<?php

class Sinistro2_Model_LiquidacoesPrevisaoPagamento extends Agro_Db_Table_Abstract
{
    protected $_schema = 'sinistro';
    protected $_name = 'liquidacoes_previsao_pagamento';
    protected $_primary = 'id';
    public $_order = 'id';

    public function save($dados) 
    {   
        try {
            $row = $this->getRow($dados['id']);

            if (!empty($dados["id_liquidacao"])) {
                $row->id_liquidacao = $dados["id_liquidacao"];
            }

            if (!empty($dados["vl_pagamento"])) {
                $row->vl_pagamento = Agro_Util::formatCurrencyDb($dados["vl_pagamento"]);
            }

            if (!empty($dados["dt_confirmacao_pagamento"])) {
                $row->dt_confirmacao_pagamento = Agro_Util::formatDate($dados["dt_confirmacao_pagamento"],
                  Zend_Date::W3C);
            }

            if (!empty($dados["fl_subvencao_descontada"])) {
                $row->fl_subvencao_descontada = $dados["fl_subvencao_descontada"] ? 1 : 0;
            }

            if ($dados['id_arquivo_processo']) {
                $row->id_arquivo_processo = $dados['id_arquivo_processo'];
            }

            if (!empty($dados["id_recibo_seguradora"])) {
                $row->id_recibo_seguradora = $dados["id_recibo_seguradora"];
            }

            if (!empty($dados["id_pagamento_seguradora"])) {
                $row->id_pagamento_seguradora = $dados["id_pagamento_seguradora"];
            }

            if (!empty($dados['id_documento_liquidacao'])) {
                $row->id_documento_liquidacao = $dados['id_documento_liquidacao'];
            }

            if (!empty($dados["fl_pagamento_adicional"])) {
                $row->fl_pagamento_adicional = $dados["fl_pagamento_adicional"] ? 1 : 0;
            }

            if (empty($row->id) 
                && !empty($row->id_liquidacao) 
                && !empty($row->id_recibo_seguradora) 
                && !empty($row->id_pagamento_seguradora)
            ) {
                $retorno = $this->getPagamentoByLiquidacaoRecibo(
                    $row->id_liquidacao, 
                    $row->id_recibo_seguradora, 
                    $row->id_pagamento_seguradora
                );

                if (!empty($retorno)) {
                    $row = $retorno;
                }
            }

            return $row->save();

        } catch (Exception $e) {
            throw new Exception($e->getMessage());
        }
    }

    public function getMapIdsLiquidacoesImportados(array $ids): array
	{
		$rowset = $this->fetchAll(
			$this->select()
				->setIntegrityCheck(false)
				->from(['slpp' => "{$this->_schema}.{$this->_name}"])
				->where('slpp.id_liquidacao IN (?)', $ids)
                ->where('slpp.id_pagamento_seguradora IS NOT NULL')
		);

		$map = [];

		if ($rowset->count() > 0) {
			foreach ($rowset as $row) {
				$map[$row['id_liquidacao']][] = $row;
			}
		}

		return $map;
	}

    public function getMapPrevisoesPagamentoByIdsLiquidacoes(array $idsLiquidacoes): array
    {
        $rs = $this->fetchAll(
            $this->select()
                ->setIntegrityCheck(false)
                ->from(['slpp' => 'sinistro.liquidacoes_previsao_pagamento'])
                ->where('slpp.id_liquidacao IN (?)', $idsLiquidacoes)
        );
        
        $map = [];
        foreach ($rs as $row) {
            $map[$row['id_liquidacao']] = $row;
        }

        return $map;
    }

    public function getPagamentoByLiquidacaoRecibo(int $idLiquidacao, int $idReciboSeguradora, int $idPagamentoSeguradora)
    {
        $select = $this->select()->setIntegrityCheck(false);
        $select->from(array('slpp' => "{$this->_schema}.{$this->_name}"), '*');
        $select->where('slpp.id_liquidacao = ?', $idLiquidacao);
        $select->where('slpp.id_recibo_seguradora = ?', $idReciboSeguradora);
        $select->where('slpp.id_pagamento_seguradora = ?', $idPagamentoSeguradora);
        

        return $this->fetchRow($select);
    }
}
