class Licitacao::Relatorios::ContratosController < ApplicationController
	include ControllerConcern

	before_action -> { verifica_modulo_na_sessao(["licitacao", "controladoria","administrativo"]) }
	before_action :authenticate_usuario!
	before_action :autoriza_usuario! , except: [:imprimir]
	before_action :disponibiliza_dependencias

	def imprimir
		bloqueia_usuario_com_base_em :read, "licitacao/contratos"
		relatorio = params[:relatorio]
		if respond_to? relatorio.to_s, :private
			loa = CombinePDF.new
			loa << CombinePDF.parse(send(relatorio))

			if Licitacao::DocumentoDoContrato.find_by(id: params[:documento_do_contrato_id]).present?
				loa.number_pages(location: :bottom_right, margin_from_height: 0, number_format: '%s', font_size: 8)
			end

			send_data loa.to_pdf, filename: "#{relatorio}.pdf", type: "application/pdf", disposition: 'inline'
		else
			redirect_to :back, alert: 'Relatório selecionado não existe'
		end
	end

	def imprimir_doc
		relatorio = params[:relatorio]
		request.format = "docx"
		respond_to do |format|
			format.docx {
				@documento_do_contrato = Licitacao::DocumentoDoContrato.find(params[:documento_do_contrato_id])
				response.headers['Content-Type'] = 'text/txt'
				response.headers['Content-Disposition'] = "attachment; filename=documento_do_contrato.docx"
				render template: "licitacao/relatorios/contratos/documento_do_contrato.docx.slim"
			}
		end
	end

	def imprimir_contrato
		@contrato = Licitacao::Contrato.find(params[:contrato_id])
		@unidade_orcamentaria = @contrato.unidade_orcamentaria rescue nil

		render_to_string pdf: "convocacao_dos_orgaos",
			template: "licitacao/relatorios/contratos/imprimir_contrato.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,


			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf.html.slim',
					locals: {
						titulo1: "#{unidade_orcamentaria.try(:unidade_gestora).try(:nome)}",
						titulo2: "CONTRATO ADMINISTRATIVO"
					}
				},
				spacing: 5
			},
			footer: {
				html: {
					template: 'layouts/_rodape_pdf.html.slim'
				}
			},
			margin: @configuracoes.margens_customizadas
	end

	def documento_do_contrato
		@documento_do_contrato = Licitacao::DocumentoDoContrato.find(params[:documento_do_contrato_id])
		titulo_numero_do_contrato = @documento_do_contrato.try(:modelo_do_documento).try(:outros_documentos?) ? "" : "Contrato N° #{@documento_do_contrato.contrato.try(:numero)}"
		titulo_numero_do_documento = @documento_do_contrato.numero.present? ? "Documento Nº #{@documento_do_contrato.numero}" : ""

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

		@unidade_orcamentaria = @documento_do_contrato.contrato.unidade_orcamentaria rescue nil

		render_to_string pdf: "documento_do_contrato",
			template: "licitacao/relatorios/contratos/documento_do_contrato.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,
			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf.html.slim',
					locals: {
						titulo1: titulo1,
						titulo2: titulo_numero_do_contrato,
						titulo3: titulo_numero_do_documento
					}
				},
			},
			footer: {
				html: {
					template: 'layouts/_rodape_pdf.html.slim'
				}
			},
			margin: @configuracoes.margens_customizadas
	end

	def itens_por_dotacao
		@contrato = Licitacao::Contrato.find(params[:contrato_id])
		unidade_orcamentaria = @contrato.unidade_orcamentaria if @contrato.unidade_orcamentaria.present?

		if @configuracoes.customizacao.exibir_nome_orgao?
			titulo2 = unidade_orcamentaria.unidade_gestora.nome.to_s
			titulo3 = @contrato.numero.present? ? "Contrato Nº: #{@contrato.try(:numero)} - #{unidade_orcamentaria.nome}" : "#{unidade_orcamentaria.nome}"
		else
			titulo2 = ''
			titulo3 = @contrato.numero.present? ? "Contrato Nº: #{@contrato.try(:numero)}" : ''
		end

		@unidade_orcamentaria = @contrato.unidade_orcamentaria rescue nil

		render_to_string pdf: "itens_por_dotacao",
			template: "licitacao/relatorios/contratos/itens_por_dotacao.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,

			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_licitacao.html.slim',
					locals: {
						titulo1: "Itens do Projeto Por Dotação",
						titulo2: titulo2,
						titulo3: titulo3
					}
				},
				spacing: 5
			},
			footer: {
				html: {
					template: 'layouts/_rodape_pdf.html.slim'
				}
			},
			margin: @configuracoes.margens_customizadas
	end

	def saldo_do_contrato
		@contrato = Licitacao::Contrato.find(params[:contrato_id])
		@disponivel = params[:saldo_disponivel] == "true"
		titulo1 = @disponivel ? "Saldo do Contrato Disponível a Empenhar" : "Saldo Total do Contrato"
		unidade_orcamentaria = @contrato.unidade_orcamentaria if @contrato.unidade_orcamentaria.present?

		if @configuracoes.customizacao.exibir_nome_orgao?
			titulo2 = unidade_orcamentaria.unidade_gestora.nome.to_s
			titulo3 = @contrato.numero.present? ? "Contrato Nº: #{@contrato.try(:numero)} - #{unidade_orcamentaria.nome} / Emissão: #{Date.today}" : "#{unidade_orcamentaria.nome} / Emissão: #{Date.today}"
		else
			titulo2 = ''
			titulo3 = @contrato.numero.present? ? "Contrato Nº: #{@contrato.try(:numero)} / Emissão: #{Date.today}" : "#{unidade_orcamentaria.nome} / Emissão: #{Date.today}"
		end

		@unidade_orcamentaria = @contrato.unidade_orcamentaria rescue nil

		render_to_string pdf: "saldo_do_contrato",
			template: "licitacao/relatorios/contratos/saldo_do_contrato.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,

			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_licitacao.html.slim',
					locals: { titulo1: titulo1,
						titulo2: titulo2,
						titulo3: titulo3
					}
				},
				spacing: 5
			},
			footer: {
				html: {
					template: 'layouts/_rodape_pdf.html.slim'
				}
			},
			margin: @configuracoes.margens_customizadas
	end

	def contratos_vigentes
		if params[:unidade_orcamentaria].blank?
			@contratos_vigentes = Licitacao::Contrato.vigentes
			unidade_escolhida = ''
		else
			unidade_orcamentaria = Loa::UnidadeOrcamentaria.find(params[:unidade_orcamentaria].to_i)
			unidades_orcamentarias_ids = unidade_orcamentaria.unidades_orcamentarias_de_exercicios_anteriores_ids

			@contratos_vigentes = Licitacao::Contrato.joins(unidade_orcamentaria_por_pedido:  :unidade_orcamentaria )
			.where(loa_unidades_orcamentarias: {id: unidades_orcamentarias_ids})
			.vigentes

			unidade_escolhida = 'Unidade Orçamentária: ' + unidade_orcamentaria.codigo_completo_e_nome
		end
		total_contratos = @contratos_vigentes.count('licitacao_contratos.id').values.sum

		@unidade_orcamentaria = @contrato.unidade_orcamentaria rescue nil

		render_to_string pdf: "contratos_vigentes",
			template: "licitacao/relatorios/contratos/contratos_vigentes.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,

			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_licitacao.html.slim',
					locals: {
						titulo1: "Relação de Contratos Vigentes em #{Date.today}",
						titulo2: unidade_escolhida,
						titulo3: "Nº de Contratos Vigentes encontrados: #{total_contratos}"
					}
				},
				spacing: 5
			},
			footer: {
				html: {
					template: 'layouts/_rodape_pdf.html.slim'
				}
			},
			margin: @configuracoes.margens_customizadas
	end

	def relacao_de_empenhos_e_liqudiacoes_do_contrato
		@contrato = Licitacao::Contrato.find(params[:contrato_id])

		@unidade_orcamentaria = @contrato.unidade_orcamentaria rescue nil

		render_to_string pdf: "relacao_de_empenhos_e_liqudiacoes_do_contrato",
			template: "licitacao/relatorios/contratos/relacao_de_empenhos_e_liqudiacoes_do_contrato.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,

			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_licitacao.html.slim',
					locals: { titulo1: "Relacao de Empenhos e Liqudiações do Contrato",
						titulo2: "",
						titulo3: ""
					}
				},
				spacing: 5
			},
			footer: {
				html: {
					template: 'layouts/_rodape_pdf.html.slim'
				}
			},
			margin: @configuracoes.margens_customizadas
	end

	def disponibiliza_dependencias
		@configuracoes = Configuracao.last
	end
end
