<?php

class Produto_Model_AtributoGrupoProponente extends Agro_Db_Table_Abstract {
	protected $_schema = 'produto';
	protected $_name = 'produtos_grupos_atributos_rn_proponentes';
	protected $_primary = array('id_grupo_atributo_rn', 'id_proponente');
	
	public function save($values) {
		$Row = $this->find($values['id_grupo_atributo_rn'], $values['id_proponente'])->current();
		if (!$Row) $Row = $this->createRow();
		
		$Row->id_grupo_atributo_rn = $values['id_grupo_atributo_rn'];
		$Row->id_proponente = $values['id_proponente'];
		
		return $Row->save();
	}
	
	public function desmarcaProponete($id, $proponente) {
		return $this->_db->query("delete from produto.produtos_grupos_atributos_rn_proponentes where id_grupo_atributo_rn = $id and id_proponente = $proponente");
	}
	
	public function getProponentesRelacionados($id) {
		$Select = $this->select()->setIntegrityCheck(false);
		$Select->from(array('g' => 'produto.produtos_grupos_atributos_rn_proponentes'), null);
		$Select->join(array('p' => 'seguro.proponentes'), 'g.id_proponente = p.id', array('id', 'ds_nome_proponente', 'cpf_cnpj'));
		$Select->where("id_grupo_atributo_rn = ?", $id);
		$Select->order("ds_nome_proponente");
		
		return $this->fetchAll($Select);
	}

	public function getGruposProponenteByCpfCnpj(string $cpfCnpj, int $idProduto, string $dsTipo = '')
    {
        $select = $this->select()->setIntegrityCheck(false);
        $select->from(['pgarp' => 'produto.produtos_grupos_atributos_rn_proponentes'], null);
        $select->join(['prop' => 'seguro.proponentes'], 'prop.id = pgarp.id_proponente', ['ds_nome_proponente']);
        $select->join(['pgar' => 'produto.produtos_grupos_atributos_rn'], 'pgar.id = pgarp.id_grupo_atributo_rn', ['ds_nome_grupo']);
        $select->where("prop.cpf_cnpj = ?", $cpfCnpj);
        $select->where("pgar.id_produto = ?", $idProduto);

        if (!empty($dsTipo)) {
            $select->where("pgar.ds_tipo = ?", $dsTipo);
        }

        return $this->fetchAll($select);
    }

	/**
	 * Vincula os proponentes ao grupo informado
	 *
	 * @param int $idGrupo
	 * @param array $idsProponentes 
	 */
	public function vincularProponentes(int $idGrupo, array $idsProponentes): void
	{
		$proponentesRelacionados = $this->getProponentesRelacionados($idGrupo);
		$mapProponentesRelacionados = [];
		
		foreach ($proponentesRelacionados as $propRel) {
			$mapProponentesRelacionados[$propRel['id']] = true;
		}

		$sql = "INSERT INTO {$this->_schema}.{$this->_name} (id_grupo_atributo_rn, id_proponente) VALUES";

		$separator = '';
		foreach ($idsProponentes as $idProponente) {
			if (array_key_exists($idProponente, $mapProponentesRelacionados)) {
				continue;
			}

			$sql .= "{$separator}({$idGrupo}, {$idProponente})";
			$separator = ',';
		}
		
		if (!empty($separator)) {
			$this->_db->query($sql);
		}
	}
}
