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 = DateTime.now
    day = Date.today.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
    @zone     = Zone.all
    @customer = Customer.all
    @tables   = Table.all.active.order('status desc')
    @rooms    = Room.all.active.order('status desc')
    render "origami/addorders/detail"
  end

  def modify_order
    today = DateTime.now
    day = Date.today.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][0,3] == "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 = params[:sale_id]

    if @booking
      @booking_id = @booking.booking_id
      @order_items = Array.new
      @booking.booking_orders.each do |booking_order|
        order = Order.find(booking_order.order_id)
        if (order.status == "new")
          @obj_order = order
          @customer = order.customer
          @date = order.created_at
          order.order_items.each do |item|
            @order_items.push(item)
          end
        end
      end
    else
      @booking = nil
    end
     render "origami/addorders/detail"
  end

  def update_modify_order
    Rails.logger.debug "Order Source - " + params[:order_source].to_s
    Rails.logger.debug "Table ID - " + params[:table_id].to_s
    is_extra_time = false
    extra_time = ''

    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] == ""? "CUS-000000000001" : params[: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.new_booking = true
    @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

      #Create Table Booking or Room Booking
      if !params["booking_id"].nil?
          # check booking id is already completed.
          booking = Booking.find(params[:booking_id])
          if params[:table_id].to_i > 0
            table_status = booking.dining_facility_id.to_i == params[:table_id].to_i
          else
            table_status = true
          end
          if booking
              if table_status && booking.booking_status != 'moved'
                if !booking.sale_id.nil?
                  sale_status = check_order_with_booking(booking)
                  if sale_status
                    return return_json_status_with_code(400, "bill requested")
                  end
                else
                  @order.new_booking = false
                  @order.booking_id = params[:booking_id]
                end
              else
                if params[:table_id].to_i > 0
                  sale_status = check_order_with_table(params[:table_id])
                  if sale_status
                    return return_json_status_with_code(400, "bill requested")
                  end
                end
              end
          end #booking exists
      else
        if params[:table_id].to_i > 0
          sale_status = check_order_with_table(params[:table_id])
          if sale_status
            # return false , @message = "bill requested"
            return return_json_status_with_code(400, "bill requested")
          end
        end
      end

      @status, @booking = @order.generate
      if(params[:sale_id][0,3] == "SAL") 
        if @status && @booking && @order.source == 'quick_service'
          if params[:sale_id]
            @sale = Sale.find(params[:sale_id])
            if @order.table_id.to_i > 0
              @table_id = @order.table_id
            else
              @table_id = nil
            end
            update = Sale.add_to_existing_pending_invoice(@table_id,params[:sale_id],@booking)
          end
          
          result = {:status=> true, :data => @sale }
          render :json => result.to_json
        end  
      elsif (params[:sale_id][0,3] == "BKI")
         result = {:status=> true, :data => 'OK' }
          render :json => result.to_json 
      else
        result = {:status=> true, :data => nil }
        render :json => result.to_json
      end 

  end

  def get_menu_category ()
    if (params[:id])
      puts params[:id]
      #Pull this menu
      @menu = MenuCategory.find_by_id(params[:id])
      # puts @menu.menu_items[1].item_attributes.to_json
      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
      # puts @menu.menu_items[1].item_attributes.to_json
      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
       # puts 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
