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

CREATE OR REPLACE FUNCTION par.get_responsaveis(i_itrid integer ,i_cnpj character varying, 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 $function$
	DECLARE
		responsavel record;

	BEGIN		    				
		IF i_itrid = 2 THEN
			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 order by rrpdtiniciomandato desc
			)
			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;
		ELSE
			FOR responsavel IN(
				WITH secretarios as(
					SELECT  
					rrsid, 
					rrsdtiniciomandato,
					rrsdtfimmandato,
					usucpf,
					rrsnomesecretario, 
					 trim(par.naturezainteresse_v2(
											rrsdtiniciomandato, 
											rrsdtfimmandato, 
											i_datainiciovigencia,
											i_datafimvigencia, 
											i_tipoprograma)
						) as naturezainteresse 
					FROM 
						par.rollresponsaveissecretarios
					WHERE
						rrscnpj in(i_cnpj)
						 and (rrsdtfimmandato between i_datainiciovigencia and i_datafimpc or rrsdtiniciomandato between i_datainiciovigencia and i_datafimpc )
					UNION
					SELECT * FROM (
						SELECT
						rrsid, 
						rrsdtiniciomandato,
						rrsdtfimmandato,
						usucpf,
						rrsnomesecretario, 
					 	trim(par.naturezainteresse_v2(
											rrsdtiniciomandato, 
											rrsdtfimmandato, 
											i_datainiciovigencia,
											i_datafimvigencia, 
											i_tipoprograma)
							) as naturezainteresse 
						 FROM
							par.rollresponsaveissecretarios 
						 WHERE rrscnpj in(i_cnpj)
						) AS subquery WHERE TRIM(subquery.naturezainteresse)IN('Atual Gestor', 'Atual Gestor /Responsável /Corresponsável', 'Atual Gestor /Corresponsável')
						
				)SELECT DISTINCT rrsid, rrsdtiniciomandato, rrsdtfimmandato, usucpf, rrsnomesecretario, naturezainteresse FROM secretarios order by rrsdtfimmandato desc
			)
			LOOP
				_rrpid := responsavel.rrsid;
				_cpf := responsavel.usucpf;
				_nomeprefeito := responsavel.rrsnomesecretario;
				_dtiniciomandato := responsavel.rrsdtiniciomandato;
				_dtfimmandato := responsavel.rrsdtfimmandato;
				IF TRIM(responsavel.naturezainteresse) = 'Ex-dirigente' THEN
					_naturezainteresse := 'Responsável';
				ELSE
					_naturezainteresse := TRIM(responsavel.naturezainteresse);
				END IF;
				return next;		
			END LOOP;
		END IF;

END; $function$;

