require "cpf_generator/version"

module CpfGenerator
  def initialize
    numbers
  end

  def self.formatted
    Cpf.new(numbers).formatted
  end

  def self.unformatted
    Cpf.new(numbers).unformatted
  end

  def self.numbers
    [*0..9].sample(9)
  end

  class Cpf
    attr_accessor :numbers

    def initialize(numbers)
      @numbers = numbers
    end

    def formatted
      first_dv
      second_dv
      cpf = @numbers.join("")
      "#{cpf[0..2]}.#{cpf[3..5]}.#{cpf[6..8]}-#{cpf[9..11]}"
    end

    def unformatted
      first_dv
      second_dv
      @numbers.join("")
    end

    def first_dv
      value = 0
      multipliers = [10,9,8,7,6,5,4,3,2]

      multipliers.each_with_index do |mult, index|
        value += @numbers[index] * mult
      end

      check_remainder(value % 11)
    end

    def second_dv
      value = 0
      multipliers = [11,10,9,8,7,6,5,4,3,2]

      multipliers.each_with_index do |mult, index|
        value += @numbers[index] * mult
      end

      check_remainder(value % 11)
    end

    def check_remainder(remainder)
      if remainder < 2
        @numbers << 0
        0
      else
        @numbers << (11 - remainder)
        (11 - remainder)
      end
    end
  end
end