class Tutors::InvoicesController < ApplicationController

  respond_to :js, only: [:new, :edit, :create, :update]

  before_filter :require_login

  # Method to build invoice.
  def new
    @invoice = current_user.invoices.build(manually_billed: true)
    render layout: false
  end

  # Method to edit the invoice created by tutor.
  def edit
    @invoice = current_user.invoices.find(params[:id])
    render layout: false
  end

  # Method to build and create invoice for tutoring sessions and send mail regarding to invoice to payee.
  def create
    unless current_user.email == invoice_params[:user_email]
      @invoice = current_user.invoices.build invoice_params
      respond_to do |format|
        if @invoice.save
          format.js {}
        else
          format.js {render partial: 'form', replace: 'form#new_invoice'}
        end
      end
    else
      respond_to do |format|
        format.js {}
      end
    end
  end

  # Method to find and update invoice created by tutor.
  def update
    @invoice = current_user.invoices.find(params[:id])
    respond_to do |format|
      if @invoice.update_attributes(invoice_params)
        InvoiceMailer.delay(queue: :mailer).update_email(@invoice.id) if @invoice.tutor.present?
        format.js { render 'create'}
      else
        format.js {render partial: 'form', replace: "form#edit_invoice_#{@invoice.id}"}
      end
    end
  end

  # Method to find and destroy the Invoice created by tutor.
  def destroy
    invoice = Invoice.find(params[:id])
    tutoring_session = invoice.invoiceable
    if tutoring_session.tutor == current_user && !invoice.invoiceable.confirmed? && !invoice.paid
      invoice.destroy
      redirect_to [:tutor, tutoring_session]
    else
      if invoice.invoiceable.confirmed?
        flash[:notice] = "Invoice for confirmed sessions can not be deleted."
      else
        flash[:notice] = "Unable to remove this invoice. Please check if you have the rights to do so."
      end
      redirect_to [:tutor, tutoring_session]
    end
  end

  private
  def invoice_params
    params.required(:invoice).permit(:user_id, :user_email, :description, :amount).merge(manually_billed: true)
  end

end
