class Aluno::AdquirirCreditosController < ApplicationController
  before_action :autenticar_aluno
  
  def index
    if request.get?
      render 'aluno/adquirir_creditos/index', layout: 'area_do_aluno'
    end

    if request.post?
      quantidade_de_creditos = params[:quantidade_de_creditos].to_i
      valor_do_pacote = 0.0

      case quantidade_de_creditos
      when 1..4
        valor_do_pacote = quantidade_de_creditos * 7.47
      when 5..12
        valor_do_pacote = quantidade_de_creditos * 6.48
      when 13..24
        valor_do_pacote = quantidade_de_creditos * 5.99
      when 25..48
        valor_do_pacote = quantidade_de_creditos * 4.99
      else
        valor_do_pacote = 0
      end

      unless valor_do_pacote > 0
        return render json: {
          mensagens: ['Não foi possível criar o pedido.']
        }, status: 400
      end

      begin
        desconto = 0.0

        if params[:cupom]
          cupom = Cupom.where(codigo: params[:cupom].downcase.strip).first
          unless cupom.nil?
            unless cupom.expirado?
              desconto = valor_do_pacote*(cupom.porcentagem_de_desconto/100)
            end
          end
        end

        compra = Compra.create!(
          aluno: aluno_logado,
          tipo: 'creditos',
          item: {
            id: "#{quantidade_de_creditos}-creditos",
            nome: "#{quantidade_de_creditos} créditos",
            valor: valor_do_pacote,
            desconto: desconto,
            total: valor_do_pacote - desconto,
            quantidade_de_creditos: quantidade_de_creditos,
            cupom: params[:cupom]
          }
          )
      rescue => exception
        
        return render json: {
          mensagens: ['Não foi possível criar o pedido.']
        }, status: 400
      end

      pagamento = PagSeguro::PaymentRequest.new
      pagamento.notification_url = Rails.env.development? ? "http://localhost:3000/notificacao-pagseguro" : "https://#{request.env['HTTP_HOST']}/notificacao-pagseguro"
      pagamento.redirect_url = 'https://aproveme.com.br/aluno/obrigado-pela-compra'
      pagamento.reference = compra.id
      pagamento.items << {
        id: compra.item[:id], 
        description: compra.item[:nome], 
        amount: compra.item[:total], 
        weight: 0
      }

      resposta_do_pagseguro = pagamento.register

      if resposta_do_pagseguro.errors.any?
        return render json: {
          mensagens: resposta_do_pagseguro.errors
        }, status: 400
        else
          return render json: {
            'codigo_do_pagseguro': resposta_do_pagseguro.code
          }, status: 200
        end
    end
  end

  def aplicar_cupom
    cupom = Cupom.where(codigo: params[:cupom].downcase.strip).first
    if cupom.nil?
      return render json: {
        mensagem: 'Cupom inválido.'
      }, status: 400
    end

    if cupom.expirado?
      return render json: {
        mensagem: 'Cupom expirado.'
      }, status: 400
    end

    return render json: {
      codigo: cupom.codigo,
      porcentagemDeDesconto: cupom.porcentagem_de_desconto
    }, status: 200
    
  end
end
