<?php

class Sinistro2_Model_AntecipacaoPagamento extends Agro_Db_Table_Abstract {
	protected $_schema = 'sinistro';
	protected $_name = 'solicitacao_antecipacao_pagamento';
	protected $_primary = 'id';
    protected $_rowClass = 'Sinistro2_Model_Row_SolicitacaoAntecipacaoPagamento';
	
	public function save($data) {
		$Row = $this->getRow($data['id']);

		$liquidacao = (new Sinistro2_Model_Liquidacoes())->fetchRow([
    		'id = ?' => $data['id_liquidacao']
		]);

		if(!empty($this->fetchRow(["id_liquidacao = {$data['id_liquidacao']} AND fl_ativo = 't'"]))){
			throw new Exception("Atenção! Já existe um pedido de antecipação de pagamento para esta proposta.");
		}
		
		$idStatus = $liquidacao['id_status'];
		$Row->id_processo_sinistro = $data['id_processo'];
		$Row->id_liquidacao = $data['id_liquidacao'];
		$Row->id_status_liquidacao = $idStatus;
		$dataBase = DateTime::createFromFormat('d/m/Y', $data['dt_solicitacao']);
		$Row->dt_solicitacao = $dataBase ? $dataBase->format('Y-m-d') : null;
		$Row->ds_justificativa = $data['ds_justificativa'];
		$Row->dt_base_pagamento = $data['dt_base_pagamento'];

		if($Row->save()) {
			return $Row->id;
		} else {
			return false;
		}
	}

	public function buscarPorIdsAntecipacoes(string $idsString)
    {
        $idsArray = explode(',', $idsString);

        return $this->fetchAll(
            $this->select()
				->setIntegrityCheck(false)
				->from(['solicitacao_antecipacao_pagamento' => 'sinistro.solicitacao_antecipacao_pagamento'])
				->join(
					['processos' => 'sinistro.processos'],
					'processos.id = solicitacao_antecipacao_pagamento.id_processo_sinistro',
					false
				)
				->join(
					['propostas' => 'seguro.propostas'],
					'propostas.id = processos.id_proposta',
					'id_proposta_mae'
				)
                ->where('id_liquidacao IN (?)', $idsArray)
				->order('dt_solicitacao DESC')
        );
    }

	public function buscaAntecipacoesPorIdStatus(int $idStatus)
	{
		return $this->fetchAll(
			$this->select()
				->setIntegrityCheck(false)
				->from(['solicitacao_antecipacao_pagamento' => 'sinistro.solicitacao_antecipacao_pagamento'])
				->join(
					['processos' => 'sinistro.processos'],
					'processos.id = solicitacao_antecipacao_pagamento.id_processo_sinistro',
					false
				)
				->join(
					['propostas' => 'seguro.propostas'],
					'propostas.id = processos.id_proposta',
					'id_proposta_mae'
				)
                ->where('solicitacao_antecipacao_pagamento.id_status_liquidacao = ?', $idStatus)
				->order('dt_solicitacao DESC')
		);
	}
	
	public function atualizarStatusLiquidacoes(array $idsLiquidacoes, int $idStatus): void
	{
		if (empty($idsLiquidacoes)) {
			return;
		}

		// Sanitiza os IDs para garantir que são inteiros
		$ids = array_map('intval', $idsLiquidacoes);
		$placeholders = implode(',', array_fill(0, count($ids), '?'));

		$sql = "UPDATE sinistro.solicitacao_antecipacao_pagamento 
				SET id_status_liquidacao = ? 
				WHERE id_liquidacao IN ($placeholders)";

		$stmt = $this->_db->prepare($sql);
		$stmt->execute(array_merge([$idStatus], $ids));
	}



}