class Printer::OrderQueuePrinter < Printer::PrinterWorker

  def print_order_item(print_settings,oqs,order_id, item_code, print_status, options="")
    #Use CUPS service
    #Generate PDF
    #Print
    order_item =  print_query('order_item', item_code) #OrderItem.find_by_item_code(item_code)  

    filename = "tmp/order_item_#{order_item[0].item_name}" + ".pdf" 

    # check for item not to show 
    if order_item[0].price != 0 
      pdf = OrderItemPdf.new(print_settings,order_item[0], print_status, options, oqs.use_alternate_name)
      pdf.render_file filename    

      if oqs.print_copy
        self.print(filename, oqs.printer_name)

        #For print copy
        pdf.render_file filename.gsub(".","-copy.")
        self.print(filename.gsub(".","-copy."), oqs.printer_name)
      else
        self.print(filename, oqs.printer_name)
      end 
    end   
  end

   # Query for per order
  def print_order_summary(print_settings,oqs, order_id, order_items, print_status)
    #Use CUPS service
    #Generate PDF
    #Print   
    order=print_query('order_summary', order_id)

    # For Print Per Item
    if oqs.cut_per_item
      order.each do|odi|
        filename = "tmp/order_item_#{odi.item_name}" + ".pdf"
        # For Item Options
        options = odi.options == "[]"? "" : odi.options

        # check for item not to show 
        if odi.price != 0
          pdf = OrderItemPdf.new(print_settings,odi, print_status, options, oqs.use_alternate_name)
          # pdf.render_file "tmp/order_item.pdf"
          pdf.render_file filename
          if oqs.print_copy
            self.print(filename, oqs.printer_name)
            self.print(filename.gsub(".","-copy."), oqs.printer_name)
          else
            self.print(filename, oqs.printer_name)
          end
        end 
      end
    # For Print Order Summary
    else      
      filename = "tmp/order_summary_#{ order_id }" + ".pdf"
      pdf = OrderSummaryPdf.new(print_settings,order, print_status, order_items, oqs.use_alternate_name)
      pdf.render_file filename
      if oqs.print_copy
        self.print(filename, oqs.printer_name)

        #For print copy
        pdf.render_file filename.gsub(".","-copy.")
        self.print(filename.gsub(".","-copy."), oqs.printer_name)
      else
        self.print(filename, oqs.printer_name)
      end
    end
  end

  # Print for orders in booking
  def print_booking_summary(print_settings,oqs, booking_id, print_status)
    order=print_query('booking_summary', booking_id)
    # For Print Per Item
    if oqs.cut_per_item
      order.each do|odi|
        filename = "tmp/order_item_#{odi.item_name}" + ".pdf"
        # For Item Options
        options = odi.options == "[]"? "" : odi.options

        # check for item not to show 
        if odi.price != 0
          pdf = OrderItemPdf.new(print_settings,odi, print_status, options,oqs.use_alternate_name)             
          pdf.render_file filename               

          if oqs.print_copy
            self.print(filename, oqs.printer_name)

            #For print copy
            pdf.render_file filename.gsub(".","-copy.")
            self.print(filename.gsub(".","-copy."), oqs.printer_name)
          else
            self.print(filename, oqs.printer_name)
          end 
        end
      end
    # For Print Order Summary
    else      
      filename = "tmp/booking_summary_#{ booking_id }" + ".pdf"
      pdf = OrderSummaryPdf.new(print_settings,order, print_status,oqs.use_alternate_name)
      pdf.render_file filename
      if oqs.print_copy
        self.print(filename, oqs.printer_name)

        #For print copy
        pdf.render_file filename.gsub(".","-copy.")
        self.print(filename.gsub(".","-copy."), oqs.printer_name)
      else
        self.print(filename, oqs.printer_name)
      end
    end
  end

  # Query for OQS with status
  def print_query(type, id)
    if type == "order_item"
      OrderItem.select("order_items.order_id, order_items.item_code, order_items.item_name, order_items.qty, order_items.price, order_items.options, order_items.item_order_by as order_by, order_items.created_at as order_at, cus.name as customer, df.type, df.name as dining,item.alt_name as alt_name")
        .joins("left join orders ON orders.order_id = order_items.order_id
                left join booking_orders AS bo ON bo.order_id=order_items.order_id
                left join bookings AS b ON b.booking_id = bo.booking_id
                left join dining_facilities AS df ON df.id = b.dining_facility_id
                left join customers as cus ON cus.customer_id = orders.customer_id
                left join menu_items as item ON item.item_code = order_items.item_code")
        .where("order_items.item_code = '#{ id }' AND order_items.price != 0")
        .group("order_items.item_code")
    elsif type == "order_summary"                                
      OrderItem.select("order_items.order_id, order_items.item_code, order_items.item_name, order_items.qty, order_items.price, order_items.options, order_items.item_order_by as order_by, order_items.created_at as order_at, cus.name as customer, df.type, df.name as dining,item.alt_name as alt_name")
        .joins("left join orders ON orders.order_id = order_items.order_id
                left join booking_orders AS bo ON bo.order_id=order_items.order_id
                left join bookings AS b ON b.booking_id = bo.booking_id
                left join dining_facilities AS df ON df.id = b.dining_facility_id
                left join customers as cus ON cus.customer_id = orders.customer_id
                left join menu_items as item ON item.item_code = order_items.item_code")
        .where("orders.order_id = '#{ id }' AND order_items.price != 0")
        .group("order_items.order_items_id")
    else 
      # order summary for booking
      OrderItem.select("order_items.order_id, order_items.item_code, order_items.item_name, order_items.qty, order_items.price, order_items.options, order_items.item_order_by as order_by, order_items.created_at as order_at, cus.name as customer, df.type, df.name as dining,item.alt_name as alt_name")
        .joins("left join orders ON orders.order_id = order_items.order_id
                left join booking_orders AS bo ON bo.order_id=order_items.order_id
                left join bookings AS b ON b.booking_id = bo.booking_id
                left join dining_facilities AS df ON df.id = b.dining_facility_id
                left join customers as cus ON cus.customer_id = orders.customer_id
                left join menu_items as item ON item.item_code = order_items.item_code")
        .where("b.booking_id = '#{ id }' AND order_items.price != 0")                      
    end

  end
end
