-- drop function if exists par.get_responsaveis_termo_par(varchar, varchar, integer, integer, date, date, varchar)
	
create or replace function par.get_responsaveis_termo_par(
	i_muncod varchar,
	i_processo varchar,
	i_prpid integer,
	i_dopid integer,
	i_datainiciovigencia date,
	i_datafimvigencia date,
	i_tipoprograma varchar(45)
	)
	
	returns table (
		_rrpid int,
		_cpf varchar,
		_nomeprefeito varchar,
		_dtiniciomandato date,
		_dtfimmandato date,
		_naturezainteresse varchar
	)
	
	language plpgsql
	as $$
	declare 
		
		responsavel record;
		tem_ex_dirigente boolean := FALSE;
		ref_mandat_anter_inicio date;
		ref_mandat_anter_fim date;

	BEGIN		    				

			with prefeitos as( select 
					rrpid, 
					usucpf,
					rrpnomeprefeito,
					rrpdtiniciomandato,
					rrpdtfimmandato, 
				trim(par.naturezainteresse_v2(
							rrpdtiniciomandato, 
							rrpdtfimmandato, 
							i_datainiciovigencia,
							i_datafimvigencia, 
							i_tipoprograma))
					as naturezainteresse 
				 from 
					par.rollresponsaveisprefeitos where muncod in(i_muncod) 
					) 
				select 
					 (rrpdtiniciomandato - 31), (rrpdtiniciomandato - 1) into ref_mandat_anter_inicio, ref_mandat_anter_fim 
				from prefeitos 
				where 
					trim(naturezainteresse) IN('Atual Gestor', 'Atual Gestor /Responsável /Corresponsável', 'Atual Gestor /Corresponsável');

			for responsavel in( with prefeitos as( select 
														rrpid, 
														usucpf,
														rrpnomeprefeito,
														rrpdtiniciomandato,
														rrpdtfimmandato, 
														trim(par.naturezainteresse_v2(
																rrpdtiniciomandato, 
																rrpdtfimmandato, 
																i_datainiciovigencia,
																i_datafimvigencia, 
																i_tipoprograma))
														as naturezainteresse 
													 from 
														par.rollresponsaveisprefeitos where muncod in(i_muncod) 
														) 
													select 
														distinct
														rrpid, 
														usucpf,
														rrpnomeprefeito, 
														rrpdtiniciomandato,
														rrpdtfimmandato, 
														naturezainteresse 
													from prefeitos 
													where 
														trim(naturezainteresse) IN('Ex-dirigente')
														and rrpdtfimmandato between ref_mandat_anter_inicio and ref_mandat_anter_fim		
														order by rrpdtiniciomandato asc
			      									)
		loop
			if trim(responsavel.naturezainteresse) = 'Ex-dirigente' then
				if exists( select usucpf from par.get_gestor_ciencia_par(responsavel.usucpf, i_processo, i_dopid, i_prpid) )		
				then
				 	_rrpid := responsavel.rrpid;
					_cpf := responsavel.usucpf;
					_nomeprefeito := responsavel.rrpnomeprefeito;
					_dtiniciomandato := responsavel.rrpdtiniciomandato;
					_dtfimmandato := responsavel.rrpdtfimmandato;
					_naturezainteresse := 'Responsável';
					tem_ex_dirigente = TRUE;
					return next;	
				end if;
			end if;

		end loop;
	
		for responsavel in( with prefeitos as( select 
												rrpid, 
												usucpf,
												rrpnomeprefeito,
												rrpdtiniciomandato,
												rrpdtfimmandato, 
												trim(par.naturezainteresse_v2(
														rrpdtiniciomandato, 
														rrpdtfimmandato, 
														i_datainiciovigencia,
														i_datafimvigencia, 
														i_tipoprograma))
												as naturezainteresse 
										 	from 
												par.rollresponsaveisprefeitos where muncod in(i_muncod) 
											) 
										select 
											distinct
											rrpid, 
											usucpf,
											rrpnomeprefeito,
											rrpdtiniciomandato,
											rrpdtfimmandato, 
											naturezainteresse 
										from prefeitos 
										where 
											trim(naturezainteresse) NOT IN('Ex-dirigente')
											order by rrpdtiniciomandato asc
      									)
		loop
			if tem_ex_dirigente and (trim(responsavel.naturezainteresse) = 'Atual Gestor') or (trim(responsavel.naturezainteresse) = 'Atual Gestor /Responsável /Corresponsável') or (trim(responsavel.naturezainteresse) = 'Atual Gestor /Corresponsável')  then
				if tem_ex_dirigente and exists( select usucpf from par.get_gestor_ciencia_par(responsavel.usucpf, i_processo, i_dopid, i_prpid) )		
				then
				 	_rrpid := responsavel.rrpid;
					_cpf := responsavel.usucpf;
					_nomeprefeito := responsavel.rrpnomeprefeito;
					_dtiniciomandato := responsavel.rrpdtiniciomandato;
					_dtfimmandato := responsavel.rrpdtfimmandato;
					_naturezainteresse := trim(responsavel.naturezainteresse);
					return next;	
				end if;
			else
				_rrpid := responsavel.rrpid;
				_cpf := responsavel.usucpf;
				_nomeprefeito := responsavel.rrpnomeprefeito;
				_dtiniciomandato := responsavel.rrpdtiniciomandato;
				_dtfimmandato := responsavel.rrpdtfimmandato;
				_naturezainteresse := trim(responsavel.naturezainteresse);
				return next;	
			end if;
		end loop;
end; $$ 
	
	
	
			
							