<?php

class Seguro_Model_PropostaStatus extends Agro_Db_Table_Abstract {
	protected $_log = true;
	protected $_primary = 'id';
	protected $_name = 'propostas_status';
	protected $_schema = 'seguro';

	public function save(array $values) {
		if ($values['id']) {
			$Row = $this->find($values['id'])->current();
		}

		if (!$Row) {
			//desativa os outros registros
			$this->_db->query("update seguro.propostas_status set dt_alteracao = 'now()', id_usuario_alteracao = {$this->_user->id}, fl_ativo = false where id_proposta = {$values['id_proposta']}");
			$Row = $this->createRow();
		}

		$Row->ds_observacao = ($values['ds_observacao'] ? $values['ds_observacao'] : null);
		$Row->id_proposta = $values['id_proposta'];
		$Row->id_status = $values['id_status'];

		return  $Row->save();
	}

	public function saveApolices($id, $nr_apolice) {
		$User = Zend_Auth::getInstance()->getIdentity();
		$id_user = $User->id;
		
		$this->_db->query("UPDATE seguro.propostas_status SET id_usuario_alteracao = {$id_user}, fl_ativo=false WHERE id_proposta = {$id}");
		
		$Row = $this->createRow();
		$Row->id_proposta = $id;
		$Row->id_status = 8;
		$Row->id_usuario_criacao = $id_user;
		$Row->ds_observacao = 'APÓLICE ATUALIZADA VIA SCRIPT';

		if($Row->save()){
			$this->_db->query("UPDATE seguro.propostas SET nr_apolice='{$nr_apolice}',  id_usuario_alteracao={$id_user}, id_status=8 WHERE id={$id}");
		}
		
		return true;

	}

	public function getStatusAtual($id_proposta) {
		return $this->_db->fetchRow("
				select
					ps.id_status,
					ps.ds_observacao,
					s.ds_chave,
					s.ds_status
				from
					seguro.propostas_status ps inner join
					sistema.status s on ps.id_status = s.id
				where
					ps.id_proposta = $id_proposta and
					ps.fl_ativo = true");
	}

	/**
	 * Retorna a data na qual a apólice foi emitida
	 *
	 * @param int $idProposta
	 * @return string|null
	 */
	public function getDataApoliceEmitida(int $idProposta): string
	{
		$select = $this->select()->setIntegrityCheck(false)
            ->from(['ps' => "{$this->_schema}.{$this->_name}"], 'dt_criacao')
            ->where('ps.id_proposta = ?', $idProposta)
            ->where('ps.id_status = ?', Seguro_Enum_PropostaStatus::ID_APOLICE_EMITIDA)
            ->order('ps.dt_criacao')
			->limit(1);

        return $this->_db->fetchOne($select);
	}

	/**
	 * Retorna se a proposta já foi transmitida
	 *
	 * @param int $idProposta
	 * @return bool
	 */
	public function propostaTransmitida(int $idProposta): bool
	{
		$select = $this->select()->setIntegrityCheck(false)
			->from(['ps' => "{$this->_schema}.{$this->_name}"], 'id')
			->where('ps.id_proposta = ?', $idProposta)
			->where('ps.id_status = ?', Seguro_Enum_PropostaStatus::ID_ENVIADA_AGUARDANDO_CONF)
			->limit(1);

		return !empty($this->_db->fetchOne($select));
	}
}
