class ConfiguracoesController < ApplicationController
	include ContextoConcern

	before_action :authenticate_usuario!
	before_action :autoriza_usuario!
	before_action :set_configuracao, only: [:edit, :update, :show_configuracoes_sim]
	before_action :disponibiliza_dependencias, only: [:edit]

	def edit
	end

	def update
		if @configuracao.update(configuracao_params)
			redirect_to edit_configuracoes_path, notice: 'Configurações atualizadas com sucesso'
		else
			disponibiliza_dependencias
			flash[:alert] = "Erro ao atualizar configurações. Verifique os campos."
			render :edit
		end
	end

	def show_configuracoes_sim
		if current_usuario.ambos?
			@poder_do_usuario = params[:tipo_sim]
		else
			@poder_do_usuario = current_usuario.tipo_de_poder
		end
	end

	private

	def disponibiliza_dependencias
		@configuracao.build_customizacao if @configuracao.customizacao.nil?
		@configuracao.parametrizacao_modulos.build if @configuracao.parametrizacao_modulos.empty?
		@estado = Base::Estado.find(@configuracao.estado_id).uf if @configuracao.estado_id.present?
		@cidade = Base::Cidade.find(@configuracao.cidade_id).nome if @configuracao.cidade_id.present?
		@pessoas_juridicas = Base::Pessoa.includes(:tipo_de_pessoa).where.not(cnpj: nil)
	end

	def set_configuracao
		@configuracao = Configuracao.first
		@municipios_sim = Base::MunicipioSim.order(:nome).all
		@estados = Base::Estado.all
		@tipos = Configuracao.tipos
	end

	def configuracao_params
		params.require(:configuracao).permit( :assessor_contabil,
			:qtd_dias_para_encerrar_a_ata, :qtd_dias_para_encerrar_o_contrato, :envia_empenho_para_contabilidade, :envia_liquidacao_para_contabilidade,
			:tempo_limite_da_cotacao, :envia_documentos_para_controladoria, :envia_documentos_para_copfin, :mascara_numero_do_processo,
			:cnpj_da_prefeitura, :cidade_id, :estado_id, :codigo_do_municipio_no_tcm, :nome_da_prefeitura, :brasao, :ocultar_rodape,
			:ocultar_titulo_cabecalho, :tipo, :telefone_da_prefeitura, :endereco_da_prefeitura, :horario_inicio_funcionamento_da_prefeitura,
			:horario_fim_funcionamento_da_prefeitura, :nome_do_pregoeiro, :comite_programacao_financeira, :envia_projeto_para_controladoria,
			:permite_envio_de_email, :obriga_dotacao_para_registro_com_preco, :francionamento_de_dispensa_por_subelemento,
			:francionamento_de_dispensa_por_cnpj, :francionamento_de_dispensa_por_unidade_gestora, :envia_empenho_para_copfin,
			:envia_empenho_para_controladoria, :envia_parecer_inicial, :envia_parecer_final, :valida_saldo_da_dotacao_no_pb, :valida_saldo_da_dotacao_no_empenho,
			:comprometimento_de_dotacoes, :exibe_assinatura_copfin, :exibe_assinatura_controladoria, :obriga_termo_de_referencia,
			:obriga_documento_de_autorizacao, :obriga_termo_de_autuacao, :obriga_despacho, :obriga_minuta_de_contrato,
			:obriga_minuta_de_ata_de_registro_de_preco, :configura_numero_do_empenho, :permite_lancamentos_no_sabado, :email_contabilidade, :email_validacao,
			:permite_lancamentos_no_domingo, :permite_lancamentos_em_feriados, :usa_emprestimo_do_bid, :enviar_relatorio_de_medicao,
			:envia_email_pagamento_confirmado, :exibe_assinatura_ordenador, :envia_empenho_de_diaria_para_controladoria, :envia_pagamento_para_controladoria,
			:envia_empenho_de_diaria_para_copfin, :obriga_medicao_da_obra_na_liquidacao_adm, :tempo_limite_da_medicao, :permite_enviar_alertas,
			:tipo_de_acesso, :data_vencimento_acesso, :configura_numero_do_processo, :envia_liquidacao_para_controladoria, :envia_documento_para_controladoria ,
			:exibir_data_no_documento_solicitacao_liquidacao , :exibir_data_no_documento_solicitacao_empenho , :enviar_aditivo_para_controladoria, :utilizar_nova_licitacao, :controlar_empenho_por_vigencia,:controla_itens_por_dotacao,
			:utiliza_responsavel_pela_elaboracao, :permite_uso_da_bolsa_de_materiais, :prazo_da_entrada_automatica_na_bolsa_de_materiais, :prazo_da_analise_da_entrada_na_bolsa_de_materiais,
			:exibe_identificacao_da_empresa_desenvolvedora, :empresa_desenvolvedora_id, :utiliza_evento_contabil, :utiliza_assinatura_do_gestor, :exercicio_validacao,
			:numeracao_do_tombamento, :usar_centro_de_custos_na_localizacao_do_bem, :iniciar_fluxo_pelo_patrimonio, :mandar_dispensa_art_75_i_e_ii_ao_sim,
			:autorizacao_de_pagamento_via_email, :email_principal_da_autorizacao, :email_secundario_da_autorizacao, :mandar_dispensa_art_24_i_e_ii_ao_sim,
      :obriga_responsavel_pelo_pedido, :utiliza_centro_de_custo_na_requisicao, :processa_arquivo_bll, :envia_sim_contabilidade, :utiliza_saldo_de_implantacao,
			:prazo_sem_movimentacao_de_material, :obriga_conta_bancaria_da_unidade_na_solicitacao_de_empenho, :gerar_lote_somente_com_pagamento_completo, :obriga_competencia_em_despesas_extra_orcamentarias,
			:utiliza_almoxarifado, :faz_envio_do_sim, :obriga_preenchimento_de_nf, :obriga_inscricao_do_fornecedor_na_liquidacao, :ordencacao_de_itens_pela_sequencia, :obriga_conta_bancaria_empenho,
			customizacao_attributes: [
				:campo_assinatura_do_relatorio_do_pedido, :mostrar_campo_assinatura_no_projeto,
				:relatorios_margem_esquerda, :relatorios_margem_superior, :relatorios_margem_direita, :relatorios_margem_inferior, 
				:exibir_nome_orgao, :exibir_numero_pedido, :exibir_numero_pb, :exibir_numero_processo, :exibir_prefeitura_municipal
			],
			parametrizacao_modulos_attributes: [
				:id, :permite_uso_do_modulo, :nome_do_modulo, :nome_de_exibicao, :configuracao_id,
			],
			parametrizacoes_portal_da_transparencia_attributes: [
				:id, :nome_do_acesso, :nome_de_exibicao, :acesso, :link_do_botao, :configuracao_id, :data_de_inicio_da_pesquisa,
			],
			configuracoes_sim_attributes: [
				:id, :configuracao_id, :agente_publico_id, :tipo_de_responsavel, :tipo_sim, :crc, :data_de_entrada, :data_de_saida,
			],
		)
	end

end
