-- DROP FUNCTION par.get_responsaveis(varchar, date, date, date, varchar);

CREATE OR REPLACE FUNCTION par.get_responsaveis(i_muncod character varying, i_datainiciovigencia date, i_datafimvigencia date, i_datafimpc date, i_tipoprograma character varying )
 RETURNS 
 	TABLE(_rrpid integer, 
 		  _cpf character varying,
 		  _nomeprefeito character varying, 
 		  _dtiniciomandato date, 
 		  _dtfimmandato date, 
 		  _naturezainteresse character varying
 		  )
 LANGUAGE plpgsql
AS $$
	DECLARE
		responsavel record;

	BEGIN		    				

		FOR responsavel IN(
			WITH prefeitos as(
				SELECT  
					rrpid, 
					rrpdtiniciomandato,
					rrpdtfimmandato,
					usucpf,
					rrpnomeprefeito,
					trim(par.naturezainteresse_v2(
											rrpdtiniciomandato, 
											rrpdtfimmandato, 
											i_datainiciovigencia,
											i_datafimvigencia, 
											i_tipoprograma)
						) as naturezainteresse 
				FROM 
					par.rollresponsaveisprefeitos 
				WHERE
					muncod in(i_muncod)
					and (i_datainiciovigencia between rrpdtiniciomandato and rrpdtfimmandato or  i_datafimpc between rrpdtiniciomandato and rrpdtfimmandato )
				UNION
				SELECT * FROM (
					SELECT 
						rrpid, 
						rrpdtiniciomandato,
						rrpdtfimmandato,
						usucpf,
						rrpnomeprefeito, 
						trim(par.naturezainteresse_v2(
								rrpdtiniciomandato, 
								rrpdtfimmandato, 
								i_datainiciovigencia,
								i_datafimvigencia, 
								i_tipoprograma))
						as naturezainteresse 
					 FROM
						par.rollresponsaveisprefeitos where muncod in(i_muncod) 
					) AS subquery WHERE TRIM(subquery.naturezainteresse) IN('Atual Gestor', 'Atual Gestor /Responsável /Corresponsável', 'Atual Gestor /Corresponsável')
					
			)SELECT DISTINCT rrpid, rrpdtiniciomandato, rrpdtfimmandato, usucpf, rrpnomeprefeito, naturezainteresse FROM prefeitos
		)
		LOOP
			_rrpid := responsavel.rrpid;
			_cpf := responsavel.usucpf;
			_nomeprefeito := responsavel.rrpnomeprefeito;
			_dtiniciomandato := responsavel.rrpdtiniciomandato;
			_dtfimmandato := responsavel.rrpdtfimmandato;
			IF TRIM(responsavel.naturezainteresse) = 'Ex-dirigente' THEN
				_naturezainteresse := 'Responsável';
			ELSE
				_naturezainteresse := TRIM(responsavel.naturezainteresse);
			END IF;
			return next;		
		END LOOP;

END; $$;



