class Contabilidade::ImpostosDeRendaController < ApplicationController
	include ContabilidadeControllerConcern
	include ControllerConcern
	before_action :authenticate_usuario!
	before_action :autoriza_usuario!
	before_action :set_imposto_de_renda, only: [:show, :edit, :update, :destroy]

	def index
		@q = Contabilidade::ImpostoDeRenda.order(:ano_de_referencia, :mes_de_competencia).search(params[:q])
		@impostos_de_renda = @q.result(distinct: false).paginate(page: params[:page], per_page: 10)
	end

	def show
		if params[:base_de_calculo_da_aliquota].present?
			@aliquota = Contabilidade::IrrfPessoaFisica.where('imposto_de_renda_id = ? and limite_da_faixa >= ?', params[:id], params[:base_de_calculo_da_aliquota].to_f).order(:limite_da_faixa).first
			respond_to do |format|
				format.json { render json: @aliquota }
			end
		end
	end

	def new
		@imposto_de_renda = Contabilidade::ImpostoDeRenda.new
	end

	def create
		@imposto_de_renda = Contabilidade::ImpostoDeRenda.new(imposto_de_renda_params)
		
		if @imposto_de_renda.fim_de_vigencia.present? && @imposto_de_renda.inicio_de_vigencia.blank?
      @imposto_de_renda.errors.add(:inicio_de_vigencia, "deve ser preenchido quando o Fim de Vigência é preenchido")
    end

		if @imposto_de_renda.save
			redirect_to contabilidade_impostos_de_renda_path, notice: 'Imposto de Renda cadastrado com sucesso.'
		else
			render :new
		end
	end

	def edit
	end

	def update
		if @imposto_de_renda.update(imposto_de_renda_params)
			redirect_to @imposto_de_renda, notice: 'Impost de Renda atualizado com sucesso.'
		else
			render :edit
		end
	end

	def destroy
		mensagem = apaga_e_retorna_mensagem(@imposto_de_renda)
		redirect_to contabilidade_impostos_de_renda_path, mensagem
	end

	def irpf_por_data_do_pagamento
		if params[:base_de_calculo_da_aliquota].present?
			data_do_pagamento = params[:data_do_pagamento].to_date
			
			if data_do_pagamento >= Contabilidade::ImpostoDeRenda.last.inicio_de_vigencia
				imposto_de_renda = Contabilidade::ImpostoDeRenda.last
			else
				imposto_de_renda = Contabilidade::ImpostoDeRenda.where("? BETWEEN inicio_de_vigencia AND fim_de_vigencia", data_do_pagamento).first
			end

			@aliquota = Contabilidade::IrrfPessoaFisica.where('imposto_de_renda_id = ? and limite_da_faixa >= ?', imposto_de_renda.id, params[:base_de_calculo_da_aliquota].to_f).order(:limite_da_faixa).first
			respond_to do |format|
				format.json { render json: @aliquota }
			end
		end
	end

	private
	def set_imposto_de_renda
		@imposto_de_renda = Contabilidade::ImpostoDeRenda.find( params[:id] )
	end

	def imposto_de_renda_params
		params.require(:contabilidade_imposto_de_renda).permit(:mes_de_competencia, :ano_de_referencia, :desconto_por_dependente, :inicio_de_vigencia, :fim_de_vigencia)
	end
end
