module Ppa
class PropostasController < ApplicationController
	include ControllerConcern
	include PpaControllersConcern
	before_action :authenticate_usuario!
	before_action :autoriza_usuario!
	before_action :set_proposta, only: [:show, :edit, :update, :destroy, :enviar_email_com_status_atual_da_proposta, :update_interna, :update_status]
	before_action :disponibiliza_dependencias, only: [:new, :edit, :index]

	# GET /ppa/propostas
	def index
		@q = ppa_atual.propostas.order("id desc").ransack(query_params)
		@propostas = @q.result(distinct: false).paginate(page: params[:page], per_page: 60)
		@micro_regioes = ppa_atual.micro_regioes
		@sub_areas_tematicas = SubAreaTematica.all
		@is_problema = params[:problema].to_s == 'S' ? true : false
		if @is_problema
			@index_param = "S"
			@url_index = ppa_problemas_path
			@propostas = @propostas.where(is_problema: true)
		else
			@index_param = "N"
			@url_index = ppa_propostas_path
			@propostas = @propostas.where(is_problema: false)
		end
	end

	# GET /ppa/propostas/1
	def show
		render 'show_problema' if params[:problema] || @proposta.is_problema == true
	end

	# GET /ppa/propostas/new
	def new
		@micro_regioes = ppa_atual.ativar_somente_micro_regiao ? ppa_atual.micro_regioes : Array.new
		ppa = Ppa.find( ppa_atual.id )
		@proposta = ppa.propostas.new
	end

	# GET /ppa/propostas/1/edit
	def edit
		@micro_regioes = ppa_atual.micro_regioes
		if @proposta.lancada_no_ppa?
			redirect_to :back, alert: 'Essa proposta já foi lançada no PPA, então não pode ser editada.'
		else
			@proposta.regiao_id = @proposta.micro_regiao.regiao_id
			@micro_regioes = ppa_atual.micro_regioes
			@proposta.area_tematica_id = @proposta.sub_area_tematica.area_tematica_id if @proposta.sub_area_tematica_id.present?
		end
	end

	def create
		ppa = Ppa.find( ppa_atual.id )
		@proposta = ppa.propostas.new(proposta_params)
		@proposta.interna = true

		if @proposta.regiao_id.present?
			@micro_regioes = MicroRegiao.where(regiao_id: @proposta.regiao_id).all
		else
			@micro_regioes = MicroRegiao.where(regiao_id: ppa.regiao_ids).all
		end

		if @proposta.save

			if manter_form_apos_cadastro?
				if 	@proposta.is_problema == false
					redirect_path = { action: :new, proposta_id: @proposta.id, problema: false }
				else
					redirect_path = { action: :new, proposta_id: @proposta.id, problema: true }
				end
			else
				redirect_path = @proposta
			end

			if 	@proposta.is_problema == false
				redirect_to redirect_path, notice: 'Proposta foi criada com sucesso.'
			else
				redirect_to redirect_path, notice: 'Problema criado com sucesso.'
			end
		else
			@sub_areas_tematicas = SubAreaTematica.where(area_tematica_id: @proposta.area_tematica_id).all if @proposta.area_tematica_id.present?
			disponibiliza_dependencias

			@problema = @proposta.is_problema

			render :new
		end
	end

	# GET /ppa/propostas/1/edit
	def edit
		session[:pagina_atual] = request.env["HTTP_REFERER"]
		@micro_regioes = ppa_atual.micro_regioes
		if @proposta.lancada_no_ppa?
			redirect_to :back, alert: 'Essa proposta já foi lançada no PPA, então não pode ser editada.'
		else
			@proposta.regiao_id = @proposta.micro_regiao.regiao_id
			@micro_regioes = ppa_atual.micro_regioes
			@proposta.area_tematica_id = @proposta.sub_area_tematica.area_tematica_id if @proposta.sub_area_tematica_id.present?
		end
	end

	# PATCH/PUT /ppa/propostas/1
	def update
		respond_to do |format|
			if @proposta.update( proposta_params )
				format.html { redirect_to @proposta, notice: 'Proposta foi atualizada com sucesso.' }
				format.json { render json: @proposta, status: :created, location: @proposta }
			else
				disponibiliza_dependencias
				@problema = @proposta.is_problema

				@micro_regioes = MicroRegiao.where(regiao_id: @proposta.regiao_id).all
				format.html { render :edit }
				format.json { render json: @proposta.errors, status: :unprocessable_entity }
			end
		end
	end

	def update_status
		if Proposta.status[params[:status]] && @proposta.update_attribute(:status, params[:status])
			respond_to do |format|
				format.html { redirect_to ppa_propostas_path, notice: 'Status da Proposta atualizado com sucesso.' }
				format.json { render json: @proposta, status: :created, location: @proposta }
			end
		else
			redirect_to :back, alert: 'Ocorreu um erro na atualização de status'
		end
	end

	# DELETE /ppa/propostas/1
	def destroy
		mensagem = apaga_e_retorna_mensagem(@proposta)
		redirect_path = @proposta.problema ? ppa_propostas_path(problema: true) : ppa_propostas_path
		redirect_to redirect_path, mensagem
	end


	def imprimir
		@dados = Proposta.relatorio(ppa_atual.id, params[:status])
		@titulo_do_ppa = ppa_atual.titulo_para_relatorio_ppa
		@areas_tematicas = Hash[ppa_atual.areas_tematicas.collect { |area| [area.nome, area.propostas.count] }]
		respond_to do |format|
			if params[:status] == 'true'
				render 'imprimir_problema'
			else
				render 'imprimir'
			end

			format.js {

			}
			format.xlsx {
				response.headers['Content-Disposition'] = 'attachment; filename="relatorio_propostas.xlsx"'
			}
		end
	end

	def imprimir_resultado_geral_das_propostas
		@dados_do_relatorio = ::Ppa::Proposta.relatorio_geral_das_propostas( ppa_atual.id, params[:regiao], params[:area_tematica] )
		@titulo_do_ppa = ppa_atual.titulo_para_relatorio_ppa

		if params[:regiao]
			@titulo = "Resultado Geral das Propostas do PPA Participativo por Região"
		elsif params[:area_tematica]
			@titulo = "Resultado Geral das Propostas do PPA Participativo por Área Temática"
		else
			@titulo = "Resultado Geral das Propostas do PPA Participativo"
		end

		respond_to do |format|
			format.js
			format.xlsx {
				response.headers['Content-Disposition'] = "attachment; filename=\"#{@titulo.downcase.parameterize}.xlsx\""
			}
		end
	end

	def imprimir_total_de_votos_das_propostas
		@titulo_do_ppa = ppa_atual.titulo_para_relatorio_ppa
		@dados_do_relatorio = ::Ppa::Proposta.total_de_votos_das_propostas( ppa_atual.id, params[:regiao], params[:area_tematica] )

		if params[:regiao]
			@titulo = "Total dos Votos do PPA Participativo por Região Detalhada em Microrregião"
			@especificacao = "Região / Microrregião"
		elsif params[:area_tematica]
			@titulo = "Total dos Votos do PPA Participativo por Área Temática detalhada em Subárea Temática"
			@especificacao = "Área Temática / Subárea Temática - Função"
		end

		respond_to do |format|
			format.js
			format.xlsx {
				response.headers['Content-Disposition'] = "attachment; filename=\"#{@titulo.downcase.parameterize}.xlsx\""
			}
		end
	end

	def enviar_email_com_status_atual_da_proposta
		Thread.new do
			PrincipalMailer.ppa_participativo_status_da_proposta( @proposta.id ).deliver_now unless Rails.env.development? || Rails.env.test?
		end

		redirect_to @proposta, notice: 'E-mail enviado com sucesso.'
	end

	private
	def set_proposta
		@proposta = Proposta.find( params[:id] )
	end

	def disponibiliza_dependencias
		@cidadaos = PpaParticipativo::Cidadao.order(:nome).all
		@areas_tematicas = ppa_atual.areas_tematicas
		@sub_areas_tematicas = Array.new
		@regioes = ppa_atual.regioes
		@estados = Base::Estado.all
		@propostas = ppa_atual.propostas
	end

	# Permite apenas os parâmetros específicos
	def proposta_params
		params.require(:ppa_proposta).permit(:descricao, :cidadao_id, :area_tematica_id, :sub_area_tematica_id, :regiao_id, :micro_regiao_id, :proposta_combinada_id, :status, :observacoes, :votos_internos, :problema, :proposta_revisada,:is_problema,:interna)
	end
end
end
