class Origami::QuickServiceController < ApplicationController
  # before_action :set_dining, only: [:detail]
   before_action :check_user
  def check_user
    if current_user.nil?
      redirect_to root_path
    end
  end

  def index
    today = Time.current
    day = Date.current.wday

    @menus    = []
    @menu     = []
    @zone     = Zone.all
    @customer = Customer.all
    @tables   = Table.active.order('status desc')
    @rooms    = Room.active.order('status desc')
    @cashier_type = "quick_service"
    display_type = Lookup.find_by_lookup_type("display_type")
    if !display_type.nil? && display_type.value.to_i == 2
      @display_type = display_type.value
    else
      @display_type = nil
    end

    #checked quick_service only
    @quick_service_only = Lookup.collection_of('quickservice_add_order').any? { |x| x == ["quickserviceaddorder", "1"] }

    lookup_dine_in = Lookup.collection_of('quickservice_add_order')
    # puts 'lookup_dine_in!!!!'
    # puts lookup_dine_in
    if !lookup_dine_in.empty?
      lookup_dine_in.each do |dine_in|
        if dine_in[0].downcase == "quickserviceaddorder"
          if dine_in[1] == '1'
            @quick_service_only = true
          end
        end
      end
    end
    @inclusive_tax,@exclusive_tax =TaxProfile.calculate_tax("quick_service")
    render "origami/addorders/detail"
  end

  def modify_order
    @cashier_type = "quick_service"
    today = Time.current
    day = Date.current.wday
    # if params[:menu] == "true"
    @menus    = []
    @menu     = []
    # else
    #    @menus    = Menu.all
    #    @menu     = MenuCategory.active.where("menu_id =#{@menus[0].id}").order('order_by asc')
    # end
    if params[:id].include? "BKI"
      @table_id = nil
      @table = nil
      @booking = Booking.find(params[:id])
    else
      @table_id = params[:id]
      @table = DiningFacility.find(@table_id)
      @booking = @table.get_booking
    end

    @sale_id = @booking.sale_id

    if @booking
      @booking_id = @booking.booking_id
      @obj_order = @booking.orders.first
      @customer = @obj_order.customer
      @date = @obj_order.created_at
      @order_items = @booking.order_items
    end

    render "origami/addorders/detail"
  end

  def update_modify_order
    booking = Booking.find(params[:booking_id])
    sale = booking.sale
    if sale && sale.sale_status != 'new'
      render :json => { :status => false }
    end

    is_extra_time = false
    extra_time = ''
    cashier_type = "quick_service"

    items_arr = []
    JSON.parse(params[:order_items]).each { |i|
      i["item_instance_code"] = i["item_instance_code"].downcase.to_s
       if i["item_instance_code"].include? "ext"
         is_extra_time = true
         arr_exts = i["item_instance_code"].split("_")
         if arr_exts[1].match(/^(\d)+$/)
          time = arr_exts[1].to_i*60*i["quantity"].to_i
          extra_time = Time.at(time)
         end
       end
       if i["parent_order_item_id"]
         items = {"order_item_id": i["order_item_id"],"item_instance_code": i["item_instance_code"],"quantity": i["quantity"],"parent_order_item_id": i["parent_order_item_id"],"options": i["options"]}
       else
        items = {"order_item_id": i["order_item_id"],"item_instance_code": i["item_instance_code"],"quantity": i["quantity"],"options": i["options"]}
       end
       items_arr.push(items)
     }

    # begin
    order = Order.new
    order.source = params[:order_source]
    order.order_type = params[:order_type]
    order.customer_id = params[:customer_id].present? ? params[:customer_id] : walkin.customer_id # for no customer id from mobile
    order.items = items_arr
    order.guest = params[:guest_info]
    order.table_id = params[:table_id]  # this is dining facilities's id
    order.waiters = current_login_employee.name
    order.employee_name = current_login_employee.name

    order.is_extra_time = is_extra_time
    order.extra_time    = extra_time

    order.new_booking = false
    order.booking_id = booking.booking_id

    if order.generate
      if sale
        Sale.add_to_existing_pending_invoice(nil, sale.sale_id, booking)
        render :json => { :status => true, :data => sale }
      else
        render :json => { :status => true, :data => 'OK' }
      end
    else
      render :json => { :status => false }
    end

  end

  def get_menu_category ()
    if (params[:id])
      #Pull this menu
      @menu = MenuCategory.find_by_id(params[:id])
      return @menu
    else
      MenuCategory.current_menu
    end
  end


  def get_menu_sub_category ()
    id = params[:id]
    if (id)
      #Pull this menu
      @sub_menu = MenuCategory.where("menu_category_id = #{id}").active
      return @sub_menu
    end
  end

  def get_all_product()
      @product = Product.all
  end

  # render json for http status code
  def return_json_status_with_code(code, msg)
    render status: code, json: {
      message: msg,
      booking_id: booking_id
    }.to_json
  end

  def check_order_with_table(table_id)
    table =  DiningFacility.find(table_id)
    if table
      booking = table.get_current_booking
      if booking
        if !booking.sale_id.nil?
          if booking.sale.sale_status == "completed" || booking.sale.sale_status == "new"
            @order.new_booking = true
            return false
          end
        else
            @order.new_booking = false
            @order.booking_id = booking.booking_id
            return false
        end
      end
    end
  end

  def check_user
    if current_user.nil?
      redirect_to root_path
    end
  end
  # this can always true
  def check_order_with_booking(booking)
    if booking.sale.sale_status == "completed" || booking.sale.sale_status == "new"
      @order.new_booking = true
      return false
    else
      @order.new_booking = false
      @order.booking_id = params[:booking_id]
      return false
    end
  end

end
