module Loa
	class OrgaosController < ApplicationController
		include LoaControllersConcern
		include ControllerConcern

		before_action :authenticate_usuario!
		before_action :autoriza_usuario!
		before_action :bloquear_orcamento, only: [:new, :edit, :destroy]
		before_action :set_orgao, only: [:show, :edit, :update, :destroy]
		before_action :disponibiliza_dependencias, only: [:new, :edit, :create, :update]
		before_action only: [:edit, :update, :destroy] do
			verifica_autorizacao_para_status_de_orcamento_helper(@orgao.status_do_orcamento)
		end

		# GET /loa/orgaos
		def index
			orcamento = Orcamento.find_by( exercicio: params[:exercicio] )
			@q = orcamento.orgaos.order(:codigo).ransack(query_params)
			@orgaos = @q.result(distinct: false).paginate(page: params[:page], per_page: 10)
		end

		# GET /loa/orgaos/1
		def show
		end

		# GET /loa/orgaos/new
		def new
			orcamento = Orcamento.find_by( exercicio: params[:exercicio] )
			@orgao = orcamento.orgaos.new
		end

		# GET /loa/orgaos/1/edit
		def edit
		end

		# POST /loa/orgaos
		def create
			orcamento = Orcamento.find_by( exercicio: params[:exercicio] )
			@orgao = orcamento.orgaos.new(orgao_params)
			@orgao.status_do_orcamento = contexto_atual[:status]

			if @orgao.save
				if manter_form_apos_cadastro?
					redirect_path = { action: :new }
				else
					redirect_path =  @orgao
				end
				redirect_to redirect_path, notice: 'Orgao foi criado(a) com sucesso.'
			else
				render :new
			end
		end

		def prepara_importacao
			if orcamento_atual.orgaos.where("orgao_id is not null").present? || orcamento_atual.orgaos.where(orgao_id: nil).blank?
				orgaos_ja_importados_ids = orcamento_atual.orgaos.where("orgao_id is not null").map(&:orgao_id)
				if orgaos_ja_importados_ids.empty?
					@ppa_orgaos = Ppa::Orgao.where("ppa_id = ?", orcamento_atual.ppa_id).all
				else
					@ppa_orgaos = Ppa::Orgao.where("ppa_id = ? and id not in (?)", orcamento_atual.ppa_id, orgaos_ja_importados_ids).all
				end
			else
				redirect_to loa_orgaos_url(orcamento_atual), notice: "Não é possivel importar orgãos do ppa quando já existem orgãos cadastrados"
			end
		end

		def importar
			if params[:ppa_orgaos]
				params[:ppa_orgaos].each do |ppa_orgao_id|
					orgaos = Loa::Orgao.new(orcamento: orcamento_atual, orgao_id: ppa_orgao_id)
					orgaos.importar_dados_do_orgao
					orgaos.save(validate: false)
				end
				redirect_to loa_orgaos_url(orcamento_atual), success: "#{params[:ppa_orgaos].size} orgão(s) importado(s)."
			else
				redirect_to importar_orgao_do_ppa_path(orcamento_atual), notice: "Nenhum orgão selecionado para importação."
			end
		end

		# PATCH/PUT /loa/orgaos/1
		def update
			if @orgao.update( orgao_params )
				redirect_to @orgao, notice: 'Orgao foi atualizado(a) com sucesso.'
			else
				render :edit
			end
		end

		# DELETE /loa/orgaos/1
		def destroy
			mensagem = apaga_e_retorna_mensagem(@orgao)
			redirect_to loa_orgaos_url( @orgao.orcamento.to_param ), mensagem
		end

		private
		def set_orgao
			@orgao = Orgao.find( params[:id] )
		end

		def disponibiliza_dependencias
			@tipos_de_unidades_administrativas = contexto_atual.tipos_de_unidades_administrativas.order(:codigo)
		end

		# Permite apenas os parâmetros específicos
		def orgao_params
			params.require(:loa_orgao).permit(:codigo,
				:tipo_de_unidade_administrativa_id, :nome, :sigla, :cnpj,
				:endereco, :cep, :telefone, :fax, :email,
				:horario_inicio_funcionamento, :horario_fim_funcionamento, :logo
			)
		end
	end
end
