class CrmOrderPdf < Prawn::Document
  attr_accessor :receipt_width,:price_column_width,:p_width, :page_height, :margin, :price_width, :item_width, :header_font_size, :item_font_size,:item_height,:qty_column_width,:item_description_width
   def initialize(booking,order_items,printer_settings)
    self.p_width = 200
    self.page_height = 1450
    self.margin = 10
    # self.price_width = self.p_width / 2
    self.price_width=80
    self.item_width = self.p_width - self.price_width
    self.item_height = self.item_height
    self.qty_column_width = self.p_width / 2
    self.item_description_width=self.p_width - self.price_width
    self.receipt_width=130

    @item_width = self.p_width.to_i / 2
    @qty_width = @item_width.to_i / 3
    @double = @qty_width * 1.3
    @half_qty = @qty_width / 2
    #setting page margin and width
    super(:margin => [self.margin, self.margin, self.margin, self.margin], :page_size => [self.p_width, self.page_height])
    self.header_font_size = 10
    self.item_font_size = 9

    header( printer_settings.printer_name, printer_settings.name)
        stroke_horizontal_rule
    cashier_info(booking)
    line_items(order_items)

    
  end

  def header (printer_name, name)
        text "#{printer_name}", :size => self.header_font_size,:align => :center
        move_down 5
        text "#{name}", :size => self.header_font_size,:align => :center
        # move_down self.item_height
        move_down 5

        stroke_horizontal_rule

  end

  def cashier_info(booking)
        move_down 5
        move_down 2
        y_position = cursor
        bounding_box([0,y_position], :width =>self.price_width, :height => self.item_height) do
            text "Order By:", :size => self.item_font_size,:align => :left
        end

        bounding_box([self.price_width, y_position], :width =>self.receipt_width) do
              text "#{booking.checkin_by}" , :size => self.item_font_size, :align => :left
        end
        move_down 5

        y_position = cursor
        bounding_box([0,y_position], :width =>self.price_width, :height => self.item_height) do
              text "Customer:", :size => self.item_font_size,:align => :left
        end
        bounding_box([self.price_width,y_position], :width =>self.price_width) do
              text "#{booking.customer_id}" , :size => self.item_font_size,:align => :left
        end
        move_down 5

        y_position = cursor
        bounding_box([0,y_position], :width =>self.price_width, :height => self.item_height) do
              text "Date:", :size => self.item_font_size,:align => :left
        end
        bounding_box([self.price_width,y_position], :width =>self.price_width) do
              text "#{booking.checkin_at.strftime('%Y %m %d %h:%m')}" , :size => self.item_font_size,:align => :left
        end
        # stroke_horizontal_rule
        move_down 5
  end

  def line_items(order_items)
        y_position = cursor
        qty_column_width = self.p_width * 0.2
        item_description_width = self.p_width * 0.5
        price_column_width  = self.p_width * 0.3



        stroke_horizontal_rule
        move_down 5
        y_position = cursor
        pad_top(15) {
        # @item_width.to_i + @half_qty.to_i
        text_box "Items", :at =>[0,y_position], :width => @item_width.to_i - @half_qty.to_i , :height =>15, :overflow => :shrink_to_fix, :size => self.item_font_size
        text_box "Price", :at =>[@item_width.to_i - @half_qty.to_i,y_position], :width => @qty_width, :height =>15, :overflow => :shrink_to_fix, :size => self.item_font_size, :align => :right
        text_box "Qty", :at =>[@item_width.to_i-@qty_width,y_position], :width => @half_qty, :height =>15, :overflow => :shrink_to_fix, :size => self.item_font_size, :align => :right
        text_box "Total", :at =>[@item_width.to_i + @half_qty.to_i,y_position], :width => @double, :height =>15, :overflow => :shrink_to_fix, :size => self.item_font_size, :align => :right

      }

        move_down 5
        stroke_horizontal_rule

        add_line_item_row(order_items)
        

    end

    def add_line_item_row(order_items)
        y_position = cursor
        move_down 5
        sub_total = 0.0
            order_items.each do |item|

                sub_total    += item.qty*item.price
                qty           = item.qty
                total_price   = item.qty*item.price
                price         = item.price
                item_name  = item.item_name
                

                y_position = cursor

                pad_top(15) {
                  # @item_width.to_i + @half_qty.to_i
                  text_box "#{item_name}", :at =>[0,y_position], :width => @item_width.to_i - @half_qty.to_i , :height =>15, :overflow => :shrink_to_fix, :size => self.item_font_size
                  text_box "#{price}", :at =>[@item_width.to_i - @half_qty.to_i,y_position], :width => @qty_width, :height =>15, :overflow => :shrink_to_fix, :size => self.item_font_size, :align => :right
                  text_box "#{qty.to_i}", :at =>[@item_width.to_i-@qty_width,y_position], :width => @half_qty, :height =>15, :overflow => :shrink_to_fix, :size => self.item_font_size, :align => :right
                  text_box "#{total_price}", :at =>[@item_width.to_i + @half_qty.to_i,y_position], :width => @double, :height =>15, :overflow => :shrink_to_fix, :size => self.item_font_size, :align => :right

                }
                move_down 3
            end
        stroke_horizontal_rule
        move_down 5
        y_position = cursor
       
        end
 

end
