class StockCheckPdf < Prawn::Document
  attr_accessor :label_width, :price_column_width, :page_width, :page_height, :margin, :price_width, :item_width, :header_font_size, :item_font_size, :item_height, :qty_width, :total_width, :item_description_width, :text_width

  def initialize(printer_settings, stockcheck, stockcheck_items, checker_name, shop_details)
    self.page_width = printer_settings.page_width #PrintSetting.where("name = ?","Close Cashier").first.page_width
    self.page_height = printer_settings.page_height
    self.header_font_size = printer_settings.header_font_size.to_i
    self.item_font_size = printer_settings.item_font_size.to_i
    self.margin = 5
    self.price_width = 40
    self.qty_width = 20
    self.total_width = 40
    self.item_width = self.page_width - ((self.price_width + self.qty_width + self.total_width))
    self.item_height = 15
    self.item_description_width = (self.page_width-20) / 2
    self.label_width = 100

    self.text_width = (self.page_width - 80) - self.price_width / 3
    # @item_width = self.page_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 => [printer_settings.heading_space, self.margin, self.margin, self.margin], :page_size => [self.page_width, self.page_height])

    # db font setup
    if printer_settings.font != ""
        font_families.update("#{printer_settings.font}" => {
            :normal => "public/fonts/#{printer_settings.font}.ttf",
            :italic => "public/fonts/#{printer_settings.font}.ttf",
            :bold => "public/fonts/#{printer_settings.font}.ttf",
            :bold_italic => "public/fonts/#{printer_settings.font}.ttf"
        })

        font "#{printer_settings.font}"
        fallback_fonts ["Courier", "Helvetica", "Times-Roman"]
    end
    
    # font "public/fonts/Zawgyi-One.ttf"
# font "public/fonts/padauk.ttf"

    header(shop_details)

    stroke_horizontal_rule

    detail(stockcheck, stockcheck_items, checker_name)
  end

  def header (shop_details)
    move_down 7
    text "#{shop_details.name}", :left_margin => -10, :size => self.header_font_size, :align => :center
    move_down 5
    text "#{shop_details.address}", :size => self.item_font_size, :align => :center
    # move_down self.item_height
    move_down 5
    text "#{shop_details.phone_no}", :size => self.item_font_size, :align => :center
    move_down 5

    stroke_horizontal_rule
  end

  def detail(stockcheck, stockcheck_items, checker_name)
    move_down 7
    y_position = cursor
    bounding_box([0, y_position], :width => self.label_width, :height => self.item_height) do
      text "Checker : ", :size => self.item_font_size, :align => :left
    end
    bounding_box([self.label_width, y_position], :width => self.label_width, :height => self.item_height) do
      text "#{checker_name}", :size => self.item_font_size, :align => :left
    end

    y_position = cursor
    bounding_box([0, y_position], :width => self.label_width, :height => self.item_height) do
      text "Check Start Time : ", :size => self.item_font_size, :align => :left
    end
    bounding_box([self.label_width, y_position], :width => self.label_width, :height => self.item_height) do
      text "#{ stockcheck.check_start.strftime('%d-%m-%Y %I:%M %p') }", :size => self.item_font_size, :align => :left
    end

    y_position = cursor
    bounding_box([0, y_position], :width => self.label_width, :height => self.item_height) do
      text "Check End Time ", :size => self.item_font_size, :align => :left
    end
    bounding_box([self.label_width, y_position], :width => self.label_width, :height => self.item_height) do
      text "#{ stockcheck.check_start.strftime('%d-%m-%Y %I:%M %p') }", :size => self.item_font_size, :align => :left
    end

    if stockcheck_items.length > 0
      stockcheck_items.each do |st|
        move_down 5
        y_position = cursor

        item_name = MenuItemInstance.get_item_name(st.item_code)

        bounding_box([0, y_position], :width => self.item_description_width, :height => self.item_height) do
          text item_name.to_s, :size => self.item_font_size, :align => :left
        end
        bounding_box([self.item_description_width, y_position], :width => self.label_width) do
          text "#{st.stock_count.to_i}", :size => self.item_font_size, :align => :right
        end
      end
    end
    move_down 5
    stroke_horizontal_rule
  end
end
