class Contabilidade::NotasFiscaisController < ApplicationController
	include ContabilidadeControllerConcern
	include ControllerConcern

	before_action :authenticate_usuario!
	before_action :autoriza_usuario!
	before_action :set_nota_fiscal, only: %i[edit update destroy]
	before_action :set_liquidacao, only: %i[new create edit update destroy]
	before_action :disponibiliza_dependencias, except: :destroy
	before_action -> {verifica_mes_bloqueado(@nota_fiscal)}, only: [:edit, :destroy]

	# GET /contabilidade/liquidacoes/1/nota_fiscal
	def new
		@nota_fiscal = Contabilidade::NotaFiscal.new
	end

	# POST /contabilidade/liquidacoes/1/nota_fiscal
	def create
		@nota_fiscal = Contabilidade::NotaFiscal.new(nota_fiscal_params)
		@nota_fiscal.liquidacao = @liquidacao
		if @nota_fiscal.save(nota_fiscal_params)
			redirect_to @liquidacao, notice: 'Nota Fiscal foi cadastrada com sucesso.'
		else
			flash.now[:alert] = 'Não foi possível cadastrar a Nota Fiscal, verifique os dados.'
			render :new
		end
	end

	# GET /contabilidade/liquidacoes/1/nota_fiscal/1
	def edit
		if @nota_fiscal.chave_de_acesso?
			@nota_fiscal.chave_de_acesso_parte1 = @nota_fiscal.chave_de_acesso[0, 20]
			@nota_fiscal.chave_de_acesso_parte2 = @nota_fiscal.chave_de_acesso[20, 5]
			@nota_fiscal.chave_de_acesso_parte3 = @nota_fiscal.chave_de_acesso[25, 9]
			@nota_fiscal.chave_de_acesso_parte4 = @nota_fiscal.chave_de_acesso[34, 10]
		end
	end

	# PATCH/PUT /contabilidade/liquidacoes/1/nota_fiscal/1
	def update
		if @nota_fiscal.update(nota_fiscal_params)
			mensagem = 'Nota fiscal atualizada com sucesso'

			if params[:cadastrar_proxima].present?
				proxima_liquidacao = @liquidacao.proxima_liquidacao_filha
				redirect_to edit_contabilidade_liquidacao_nota_fiscal_path(proxima_liquidacao, proxima_liquidacao.nota_fiscal), notice: mensagem
			else
				if @liquidacao.liquidacao_mae.present?
					redirect_to @liquidacao.liquidacao_mae, notice: mensagem
				else
					redirect_to administrativo_editar_itens_liquidacao_path(@liquidacao), notice: mensagem
				end
			end
		else
			render :edit
		end
	end
	# DELETE /contabilidade/liquidacoes/1/nota_fiscal/1
	def destroy
		if @nota_fiscal.retencoes.empty?
			mensagem = apaga_e_retorna_mensagem(@nota_fiscal)
			redirect_to @liquidacao, mensagem
		else
			redirect_to @liquidacao, alert: 'Não foi possível deletar a Nota Fiscal pois já possui Retenções calculadas.'
		end
	end

	private
	def set_nota_fiscal
		@nota_fiscal = Contabilidade::NotaFiscal.find(params[:id])
	end

	def set_liquidacao
		@liquidacao = Contabilidade::Liquidacao.find(params[:liquidacao_id])
		@liquidacao.logado_na_contabilidade = true if logado_na_contabilidade?
	end

	def disponibiliza_dependencias
		@tipos_de_nota_fiscal = Contabilidade::NotaFiscal.tipos_da_nota
		@tipos_de_emissao = Contabilidade::NotaFiscal.tipos_de_emissao
		@tipos_de_desconto = Contabilidade::NotaFiscal.tipos_de_desconto
		@cfops = Contabilidade::Cfop.all
	end

	# Permite apenas os parâmetros específicos
	def nota_fiscal_params
		params.require(:contabilidade_nota_fiscal).permit(
			:orcamentario_iss,:extraorcamentario_iss,:extraorcamentario_inss_pj,:orcamentario_irpj,:extraorcamentario_irpj,:extraorcamentario_inss_pf,:orcamentario_irpf,:extraorcamentario_irpf,
			:numero_da_nota, :tipo_da_nota, :codigo_do_servico, :serie, :tipo_de_emissao, :data_de_emissao, :tipo_de_desconto,
			:valor_de_desconto, :data_limite_de_expedicao, :numero_protocolo_de_autorizacao, :chave_de_acesso,
			:numero_dae, :cfop_id, :serie_do_selo, :numero_do_selo, :numero_da_serie_do_selo, :numeros_de_formularios,
			:aliquota_do_iss, :aliquota_do_iss_valor, :chave_de_verificacao,
			:chave_de_acesso_parte1, :chave_de_acesso_parte2, :chave_de_acesso_parte3, :chave_de_acesso_parte4
		)
	end
end
