<?php
class Seguro_Model_PropostasCooperativas extends Agro_Db_Table_Abstract {
    protected $_schema = 'seguro';
    protected $_name = 'propostas_cooperativas';
    protected $_primary = 'id';

    public function save(array $dados) {
      $this->getDefaultAdapter()->beginTransaction();

      try {
        $row = $this->getRow($dados['id']);
        $row->id_cooperativa = $dados['id_cooperativa'];
        $row->id_proposta = $dados['id_proposta'];
        $row->cnpj = $dados['cnpj'];
        $row->ds_nome_cooperativa = $dados['ds_nome_cooperativa'];
        $row->id_estado = $dados['id_estado'];
        $row->id_municipio = $dados['id_municipio'];
        $row->save();
        $this->getDefaultAdapter()->commit();
        return $row->id;
      } catch (Exception $e) { 
          $this->getDefaultAdapter()->rollBack();
          return false;
      }
    }

    // Metodo utilizado quando é feito um endosso
    public function add($idProposta, $row) {
      try {
        $Row = $this->createRow();
        $Row->id_cooperativa = $row['id_cooperativa'];
        $Row->id_proposta = $idProposta;
        $Row->cnpj = $row['cnpj'];
        $Row->ds_nome_cooperativa = $row['ds_nome_cooperativa'];
        $Row->id_estado = $row['id_estado'];
        $Row->id_municipio = $row['id_municipio'];
        return $Row->save();        
      } catch (Exception $e) {
        return false;
      }
    }

    public function getByIdProposta(int $id_proposta) {
      $select = $this->select()->setIntegrityCheck(false)
        ->from(array('pc' => 'seguro.propostas_cooperativas'), array(
            'id',
            'id_proposta', 
            'id_cooperativa',
            'cnpj',
            'ds_nome_cooperativa',
            'id_estado',
            'id_municipio')
          )
        ->join(array('e' => 'sistema.estados'), 'e.id = pc.id_estado', 'ds_sigla')
        ->join(array('m' => 'sistema.municipios'), 'm.id_estado = e.id and m.id = pc.id_municipio', 'ds_nome_municipio')
        ->where('pc.id_proposta = ?', $id_proposta);

        return $this->fetchAll($select);
    }

    public function getComboCooperativa($id_proposta = '') : array {
      $rows = $this->getByIdProposta($id_proposta);

      if ($rows->count()) {
        $options = array('' => 'Selecione');
        foreach ($rows as $row) {
          $options[$row['id_cooperativa']] = $row['ds_nome_cooperativa'];
        }
        return $options;
      }

      return array();
    }

    public function getById(int $id) {
      $select = $this->select()->setIntegrityCheck(false)
        ->from(array('pc' => 'seguro.propostas_cooperativas'), array(
            'id', 
            'id_proposta', 
            'id_cooperativa', 
            'cnpj', 
            'ds_nome_cooperativa', 
            'id_estado', 
            'id_municipio')
          )
        ->join(array('e' => 'sistema.estados'), 'e.id = pc.id_estado', 'ds_sigla')
        ->join(array('m' => 'sistema.municipios'), 'm.id_estado = e.id and m.id = pc.id_municipio', 'ds_nome_municipio')
        ->where('pc.id = ?', $id);

      return $this->fetchAll($select);
    }
    
    // Exclui todos os locais vinculados a proposta
    public function deleteByIdProposta(int $id_proposta){
      $this->getDefaultAdapter()->beginTransaction();
      try {
        $this->getAdapter()->query("DELETE FROM seguro.propostas_cooperativas WHERE id_proposta = $id_proposta");
        $this->getDefaultAdapter()->commit();
        return true;
      } catch (Exception $e) {
        $this->setMessage('Erro ao excluir locais da proposta.');
        $this->getDefaultAdapter()->rollBack();
        return false;
      }
    }

    // Retorna true (0) se a cooperativa não foi usada em outra proposta
    public function isFirst(int $id_cooperativa) {
      $select = "SELECT CASE
                    WHEN NOT EXISTS (
                        SELECT *
                          FROM seguro.propostas_cooperativas
                         WHERE id_cooperativa = ".$id_cooperativa."
                    ) THEN 0 ELSE 1 END AS isFirst";
      
      return $this->_db->fetchAll($select);
    }
}