class DashboardController < ApplicationController

  def index
    @from, @to = get_date_range_from_params

    @shop = Shop.current_shop

    @orders = Sale.receipt_date_between(@from, @to).where("payment_status = 'new' and sale_status = 'bill'")
    @sales = Sale.receipt_date_between(@from, @to).completed

    if current_user.present? && !(current_user.role == 'administrator' || current_user.role == 'manager' || current_user.role == 'account'  || current_user.role == 'supervisor')
      if shift = ShiftSale.current_open_shift(current_user)
        @orders = @orders.where(shift_sale_id: shift.id)
        @sales = @sales.where(shift_sale_id: shift.id)
      end
    end

    @top_products = Sale.top_bottom_products(current_user,@from,@to,"top")
    @bottom_products = Sale.top_bottom_products(current_user,@from,@to,"bottom")
    @hourly_sales = Sale.hourly_sales(current_user,@from,@to)
    # .group_by_hour(:created_at, :time_zone => 'Asia/Rangoon',format: '%I:%p')
    # .sum(:grand_total)
    employee_sales = Sale.employee_sales(current_user,@from,@to)
                    # .sum("(CASE WHEN sp.payment_method='cash' THEN ((sp.payment_amount) - (sales.amount_changed)) ELSE (sp.payment_amount) END)")
    @employee_sales = []
    if !employee_sales.nil?
      employee_sales.each do |emp|
        emp_data = []
        if emp.payment_amount > 0
          emp_data.push([emp.e_name, emp.payment_amount])

          @employee_sales.push({'name' => emp.payment_method, 'data' => emp_data})
        end
      end
    end
    @inventories    = StockJournal.inventory_balances(@from,@to).sum(:balance)

    @total_trans    = Sale.total_trans(current_user,@from,@to)
    @total_card     = Sale.total_card_sale(current_user,@from,@to)
    @total_credit   = Sale.credit_payment(current_user,@from,@to)

    @sale_data = Array.new
    @total_payment_methods = Sale.total_payment_methods(current_user,@from,@to)

    if !@total_payment_methods.nil?
      @total_payment_methods.each do |payment|
        pay = Sale.payment_sale(payment.payment_method, current_user,@from,@to)
        @sale_data.push({payment.payment_method => pay.payment_amount})
      end
    end

    @summ_sale              = Sale.summary_sale_receipt(current_user,@from,@to)
    @total_customer, @total_dinein, @total_takeaway, @total_membership  = Sale.total_customer(current_user,@from,@to)
    # @total_other_customer   = Sale.total_other_customer(today,current_user)

    @total_order            = Sale.total_order(current_user,@from,@to)
    @total_accounts         = Account.select("accounts.id as account_id, accounts.title as title")
    @account_data = Array.new
    if !@total_accounts.nil?
      @total_accounts.each do |account|
        acc = Sale.account_data(account.account_id,current_user,@from,@to)
        if !acc.nil? && acc.cnt_acc > 0
          @account_data.push({account.title => acc.cnt_acc, account.title + '_amount' => acc.total_acc})
        end
      end
      @total_accounts = @total_accounts.reject.with_index { |x, i| @account_data[i].nil? }
    end

    @top_items         = Sale.top_items(current_user,@from,@to)
    @total_foc_items   = Sale.total_foc_items(current_user,@from,@to)

    # get printer info
    @print_settings = PrintSetting.get_precision_delimiter()
  end

private

  def get_date_range_from_params
    if params[:from].present? && params[:to].present?
      if params[:from_time].present? && params[:to_time].present?
        from = Time.zone.parse("#{params[:from]} #{params[:from_time]}")
        to = Time.zone.parse("#{params[:to]} #{params[:to_time]}")
      else
        from = Time.zone.parse(params[:from])
        to = Time.zone.parse(params[:to]).end_of_day
      end
    else
      from = Time.current.beginning_of_day
      to = Time.current.end_of_day
    end
    return from, to
  end

end
