class Administrativo::Relatorios::LiquidacoesController < ApplicationController
	include ControllerConcern

	before_action :authenticate_usuario!
	before_action :autoriza_usuario!, except: [:imprimir]
	before_action :disponibiliza_dependencias

	def imprimir
		bloqueia_usuario_com_base_em :read, "administrativo/liquidacoes"
		relatorio = params[:relatorio]

		if respond_to? relatorio.to_s, :private
			loa = CombinePDF.new
			loa << CombinePDF.parse(send(relatorio))
			send_data loa.to_pdf, filename: "#{relatorio}.pdf", type: "application/pdf", disposition: 'inline'
		else
			redirect_to :back, alert: 'Demonstrativo selecionado não existe'
		end
	end

	def estorno_da_liquidacao
		set_estorno_da_liquidacao
		render_to_string pdf: "estorno_da_liquidacao",
			template: "administrativo/relatorios/liquidacoes/estorno_da_liquidacao.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,

			dpi: '96',
			page_size: 'A4',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf.html.slim',
					locals: {
						titulo1: "Estorno de Liquidação",
						titulo2: "Liquidação Nº #{@estorno_de_liquidacao.liquidacao.empenho_e_numero}"
					}
				},
				spacing: 4
			},
			footer: {
				html: {
					template: 'layouts/_rodape_pdf.html.slim'
				}
			},
			margin: { top: 30, bottom: 10, left: 10, right: 10 }
	end

	def liquidacoes_estornadas
		@estornos_das_liquidacoes = contexto_atual.estornos_de_liquidacao

		render_to_string pdf: "liquidacoes_estornadas",
			template: "administrativo/relatorios/liquidacoes/liquidacoes_estornadas.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,

			dpi: '96',
			page_size: 'A4',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf.html.slim',
					locals: {
						titulo1: "Anulações dos Empenhos",
						titulo2: ""
					}
				},
				spacing: 4
			},
			footer: {
				html: {
					template: 'layouts/_rodape_pdf.html.slim'
				}
			},
			margin: { top: 30, bottom: 10, left: 10, right: 10 }
	end

	def documento
		@documento_da_liquidacao = Contabilidade::DocumentoDaLiquidacao.find(params[:documentos_da_liquidacao_id])

		if @configuracoes.customizacao.exibir_nome_orgao?
			titulo2 = @documento_da_liquidacao.liquidacao.unidade_orcamentaria.unidade_gestora.try(:nome)
		else
			titulo2 = ''
		end

		render_to_string pdf: "documento",
			template: "contabilidade/documentos_da_liquidacao/documento.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,

			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf.html.slim',
					locals: {
						titulo1: @documento_da_liquidacao.titulo_personalizado,
						titulo2: titulo2
					}
				},
				spacing: 5
			},
			footer: {
				html: {
					template: 'layouts/_rodape_pdf.html.slim'
				}
			},
			margin: @configuracoes.margens_customizadas(top: 5)
	end

	def imprimir_doc
		request.format = "docx"
		respond_to do |format|
			format.docx {
				@documento_da_liquidacao = Contabilidade::DocumentoDaLiquidacao.find(params[:documentos_da_liquidacao_id])
				response.headers['Content-Type'] = 'text/txt'
				response.headers['Content-Disposition'] = "attachment; filename=documento.docx"
				render template: "administrativo/relatorios/liquidacoes/documento_da_liquidacao.docx.slim"
		}
		end
	end

	private
	def solicitacao_de_liquidacao
		@liquidacao =  Contabilidade::Liquidacao.find_by(id: params[:liquidacao_id])
		@tipo = params[:tipo]
		@subempenho = params[:subempenho]

		if @configuracoes.customizacao.exibir_nome_orgao?
			titulo1 = @liquidacao.unidade_orcamentaria.unidade_gestora.nome.to_s
		else
			titulo1 = ''
		end

		if @liquidacao.restos_a_pagar?
			if @tipo == 'solicitacao'
				titulo2 = "Solicitação de Liquidação de Restos a Pagar " + @liquidacao.empenho_e_numero + " - Empenho " + @liquidacao.empenho.numero_do_empenho
				@eh_solicitacao = true
			elsif @tipo == 'nota'
				titulo2 = "Nota de Liquidação de Restos a Pagar " + @liquidacao.empenho_e_numero + " - Empenho " + @liquidacao.empenho.numero_do_empenho
			elsif @tipo == "solicitacao original"
				titulo2 = " Empenho #{@liquidacao.empenho.numero_do_empenho}"
			else
				titulo2 = ''
			end
		else
			if @tipo == 'solicitacao'
				titulo2 = "Empenho #{@liquidacao.empenho.numero_do_empenho}"
				@eh_solicitacao = true
			elsif @tipo == 'nota'
				titulo2 = "Empenho #{@liquidacao.empenho.numero_do_empenho}"
			else
				titulo2 = ''
			end
		end

		render_to_string pdf: "solicitacao_de_liquidacao",
			template: "administrativo/relatorios/liquidacoes/solicitacao_de_liquidacao.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,

			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf.html.slim',
					locals: {
						titulo1: titulo1,
						titulo2: titulo2
					}
				},
				spacing: 0
			},
			footer: {
				html: {
					template: 'layouts/_rodape_pdf.html.slim'
				}
			},
			margin: @configuracoes.margens_customizadas(top: 5)
	end

	def estorno_de_liquidacao
		@liquidacao =  Contabilidade::Liquidacao.find_by(id: params[:liquidacao_id])
		@tipo = params[:tipo]
		@subempenho = params[:subempenho]

		if @configuracoes.customizacao.exibir_nome_orgao?
			titulo1 = @liquidacao.unidade_orcamentaria.unidade_gestora.nome.to_s
		else
			titulo1 = ''
		end

		titulo2 = "Relatório de Estorno de Liquidação"

		render_to_string pdf: "estorno_de_liquidacao",
			template: "administrativo/relatorios/liquidacoes/estorno_de_liquidacao.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,

			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf.html.slim',
					locals: {
						titulo1: titulo1,
						titulo2: titulo2
					}
				},
				spacing: 0
			},
			footer: {
				html: {
					template: 'layouts/_rodape_pdf.html.slim'
				}
			},
			margin: @configuracoes.margens_customizadas(top: 5)
	end

	def set_estorno_da_liquidacao
		@estorno_de_liquidacao = Contabilidade::EstornoDeLiquidacao.find(params[:estorno_de_liquidacao])
		@liquidacao = @estorno_de_liquidacao.liquidacao
	end

	def disponibiliza_dependencias
		@configuracoes = Configuracao.last
		liquidacao_id = (params[:liquidacao_id].present? ? params[:liquidacao_id] : params[:documentos_da_liquidacao_id]) rescue nil
		@unidade_orcamentaria = Contabilidade::Liquidacao.find(liquidacao_id).unidade_orcamentaria
	end
end
