class SeedGenerator < ApplicationRecord
  # Generate ID for Tables
  def self.generate_id(model, prefix)
    cur_val, next_val = self.update_seed(model)

    if (cur_val == 0)
      cur_val, next_val = self.execute_query(model)
    end 

    padding_len = 15 - prefix.length
    saleOrderId = prefix +"-"+ cur_val.to_s.to_s.rjust((14-prefix.length)+1,'0')
    return saleOrderId 
  end

  # Generate Receipt No for number order (1,2,3) Don't touch
  def self.new_receipt_no
    seed = SeedGenerator.find_by_model("sale")
    new_receipt_no = 0
    if (seed.nil?)
      seed = SeedGenerator.new()
      seed.model = "sale"
      new_receipt_no = seed.next
      seed.save

    else
      current_no = seed.next
      seed.next = seed.next
      seed.current = current_no
      seed.save
    end

    return seed.current 
  end

  # Generate for 4 digit Code
  def self.generate_code(model, prefix)
    seed = SeedGenerator.find_by_model(model)
    new_code = 0

    if (seed.nil?)
      seed = SeedGenerator.new()
      seed.model = model
      new_code = seed.next
      seed.save
    else
      current_no = seed.next
      seed.next = seed.next + seed.increase_by
      seed.current = current_no
      seed.save
    end

    
    if prefix.length == 1
      padding_len = 5 - prefix.length
      count = 4-prefix.length
    else prefix.length == 2
      padding_len = 6 - prefix.length
      count = 5-prefix.length
    end
    next_code = prefix + seed.current.to_s.to_s.rjust((count)+1,'0')    
    return next_code
  end

  def self.execute_query(model)
    current = 0
    nex = 0
    
    sql = "INSERT INTO seed_generators (model, created_at, updated_at)      
            VALUES('#{ model }', NOW(), NOW()) 
            ON DUPLICATE KEY UPDATE current = current + 1, next = next + 1;"

    select_sql = "select * from seed_generators where model='#{model}';"           
    ActiveRecord::Base.connection.execute(sql);
    select_result = ActiveRecord::Base.connection.execute(select_sql);
    
    select_result.each do |row|      
      current = row [3]
      nex = row[4]
    end

    return current, nex
  end

  def self.update_seed(model)   
    current = 0
    nex = 0

    update_sql = "UPDATE seed_generators set current = current + 1, next = next + 1 WHERE model='#{model}';"
    select_sql = "select * from seed_generators where model='#{model}';"
    update_result = ActiveRecord::Base.connection.execute(update_sql);

    select_result = ActiveRecord::Base.connection.execute(select_sql);
    
    select_result.each do |row|      
      current = row [3]
      nex = row[4]
    end

    return current, nex
  end
end
