class Transactions::OrderReservationsController < ApplicationController
	load_and_authorize_resource except: [:create]
  before_action :set_transactions_order_reservation, only: [:show, :edit, :update, :destroy]
  before_action :check_user

  # GET /transactions/order_reservations
  # GET /transactions/order_reservations.json
  def index
    from, to  	= get_date_range_from_params
    filter 		= params[:filter]

    if from.nil? && to.nil?
        @order_reservations = OrderReservation.select("order_reservations.*, deliveries.provider, deliveries.delivery_fee")
        						.joins(" JOIN deliveries on deliveries.order_reservation_id = order_reservations.order_reservation_id")
        						.where("NOT order_reservation_status='new'")
        						.order("order_reservation_id desc")
        @order_reservations = Kaminari.paginate_array(@order_reservations).page(params[:page]).per(20)
    else
        order_reservation = OrderReservation.search(filter,from,to)
        if order_reservation.length > 0
           @order_reservations = order_reservation 
           @order_reservations = Kaminari.paginate_array(@order_reservations).page(params[:page]).per(20)
         else
           @order_reservations = 0
         end    
    end
    @from       = from
    @to         = to
    # get printer info
    @print_settings = PrintSetting.get_precision_delimiter()
    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @order_reservations }
    end

  end

  # GET /transactions/order_reservations/1
  # GET /transactions/order_reservations/1.json
  def show
   
    @order_reservation = OrderReservation.select("order_reservations.*, deliveries.provider, deliveries.delivery_fee")
        						.joins(" JOIN deliveries on deliveries.order_reservation_id = order_reservations.order_reservation_id")
        						.where("order_reservations.order_reservation_id = ?", params[:id])
    							.first()
    #get customer amount
    @customer       = Customer.find(@order_reservation.customer_id)
    #get delivery details
    @delivery       = Delivery.find_by_order_reservation_id(@order_reservation.order_reservation_id)
    # get printer info
    @print_settings = PrintSetting.get_precision_delimiter()
    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @order_reservation }
    end
  end

  # date range
  PERIOD = {
    "today" => 0,
    "yesterday" => 1,
    "this_week" => 2,
    "last_week" => 3,
    "last_7" => 4,
    "this_month" => 5,
    "last_month" => 6,
    "last_30" => 7,
    "this_year" => 8,
    "last_year" => 9
  }

  def get_date_range_from_params
      period_type = params[:period_type]
      period = params[:period]
      from = params[:from]
      to = params[:to]   
      day_ref = Time.now.utc.getlocal

        if from.present? && to.present?
            f_date = DateTime.parse(from)
            t_date = DateTime.parse(to)
            f_time = Time.mktime(f_date.year,f_date.month,f_date.day,f_date.hour,f_date.min,f_date.sec)
            t_time = Time.mktime(t_date.year,t_date.month,t_date.day,t_date.hour,t_date.min,t_date.sec)
            from   = f_time.beginning_of_day.utc.getlocal
            to     = t_time.end_of_day.utc.getlocal 
        else 
            case period.to_i
              when PERIOD["today"]
                from = day_ref.beginning_of_day.utc
                to = day_ref.end_of_day.utc

              when PERIOD["yesterday"]
                from = (day_ref - 1.day).beginning_of_day.utc
                to = (day_ref - 1.day).end_of_day.utc

              when PERIOD["this_week"]
                from = Time.now.beginning_of_week.utc
                to = Time.now.utc
              when PERIOD["last_week"]
                from = (day_ref - 7.day).beginning_of_week.utc
                to = (day_ref - 7.day).end_of_week.utc
              when PERIOD["last_7"]
                from = (day_ref - 7.day).utc
                to = Time.now.utc
              when PERIOD["this_month"]
                from = Time.now.beginning_of_month.utc
                to = Time.now.utc
              when PERIOD["last_month"]
                from = (day_ref - 1.month).beginning_of_month.utc
                to = (day_ref - 1.month).end_of_month.utc
              when PERIOD["last_30"]
                from = (day_ref - 30.day).utc
                to = Time.now.utc
              when PERIOD["this_year"]
                from = Time.now.beginning_of_year.utc
                to = Time.now.utc
              when PERIOD["last_year"]
                from = (day_ref - 1.year).beginning_of_year.utc
                to = (day_ref - 1.year).end_of_year.utc
            end  
        end

      return from, to 
  end

  def check_user
    if current_user.nil?
      redirect_to root_path
    end
  end
  
  private
    # Use callbacks to share common setup or constraints between actions.
    def set_transactions_order_reservation
      @transactions_order_reservation = OrderReservation.find(params[:id])
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def transactions_order_reservation_params
      params.require(:transactions_order_reservation).permit(:cashier_id, :cashier_name, :requested_by, :requested_at, :receipt_no, :receipt_date, :customer_id, :payment_status, :order_reservation_status, :total_amount, :total_discount, :total_tax, :tax_type, :grand_total, :rounding_adjustment, :amount_received, :amount_changed)
    end
end
