<?php

class Comercializacao_Model_TaxasAgrupamentoProponente extends Agro_Db_Table_Abstract {
	protected $_schema = 'comercializacao';
	protected $_name = 'taxas_agrupamento_proponentes';
	protected $_primary = array('id_taxa_agrupamento', 'id_proponente');

	public function save($values) {
		$Row = $this->find($values['id_taxa_agrupamento'], $values['id_proponente'])->current();
		if (!$Row) $Row = $this->createRow();

		$Row->id_taxa_agrupamento = $values['id_taxa_agrupamento'];
		$Row->id_proponente = $values['id_proponente'];

		return $Row->save();
	}

	public function getData($where=null){
		$select = $this->select()->distinct();
		$select->setIntegrityCheck(false);
		$select->from(array('c'=>'comercializacao.v_taxas_agrupamento'), '*');
		$select->joinLeft(array('tp' => 'comercializacao.taxas_agrupamento_proponentes'), 'c.id = tp.id_taxa_agrupamento', false);
		$select->joinLeft(array('pr' => 'seguro.proponentes'), 'tp.id_proponente = pr.id', false);

		if (is_array($where)) {
			if($where['id_estado']) {
				$select->where("
				exists(select 1 from sistema.municipios mun where pr.id_municipio = mun.id and id_estado = {$where['id_estado']})");
				unset($where['id_estado']);
			}

			foreach ($where as $clause) {
				$field = $clause['field'];
				$operator = $clause['operator'];
				$value = $clause['value'];

				$select->where("$field $operator ?", $value);
			}
		} elseif ($where != '') {
			$select->where($where);
		}
		if($this->_order)
			$select->order($this->_order);

		return $select;
	}

	public function getProponentesRelacionados($id) {
		$Select = $this->select()->setIntegrityCheck(false);
		$Select->from(array('tap' => 'comercializacao.taxas_agrupamento_proponentes'), null);
		$Select->join(array('p' => 'seguro.proponentes'), 'tap.id_proponente = p.id', array('id', 'ds_nome_proponente', 'cpf_cnpj'));
		$Select->where("id_taxa_agrupamento = ?", $id);
		$Select->order("ds_nome_proponente");

		return $this->fetchAll($Select);
	}

	public function desmarcaProponete($id, $id_proponente) {
		return $this->_db->query("delete from comercializacao.taxas_agrupamento_proponentes where id_taxa_agrupamento = $id and id_proponente = $id_proponente");
	}

    public function getTaxaAgrupamento(int $idTaxaAgrupamento)
    {
        $select = $this->select();
        $select->setIntegrityCheck(false);
        $select->from(array('tap' => 'comercializacao.taxas_agrupamento_proponentes'), '*');
        $select->join(array('ta' => 'comercializacao.taxas_agrupamento'), 'tap.id_taxa_agrupamento = ta.id', '*');
        $select->where('id_taxa_agrupamento = ?', $idTaxaAgrupamento);

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

	public function vincularProponentes(int $idTaxaAgrupamento, array $idsProponentes): void
	{
		$proponentesRelacionados = $this->getProponentesRelacionados($idTaxaAgrupamento);
		$mapProponentesRelacionados = [];
		
		foreach ($proponentesRelacionados as $propRel) {
			$mapProponentesRelacionados[$propRel['id']] = true;
		}

		$sql = "INSERT INTO comercializacao.taxas_agrupamento_proponentes (id_taxa_agrupamento, id_proponente) VALUES";

		$separator = '';
		foreach ($idsProponentes as $idProponente) {
			if (array_key_exists($idProponente, $mapProponentesRelacionados)) {
				continue;
			}

			$sql .= "{$separator}({$idTaxaAgrupamento}, {$idProponente})";
			$separator = ',';
		}
		
		if (!empty($separator)) {
			$this->_db->query($sql);
		}
	}
}