module IpValidator
  
  def required_fields val
    if val.present?
      return true
    else
      return false
    end
  end

  def validate_ip val
    ip_regex = /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/;
    if val.present? && val.match(ip_regex)
      return true
    else
      return false
    end
  end

  def validate_mac_id val
    macID_regex = /^([0-9A-Fa-f]{2}[:]){5}([0-9A-Fa-f]{2})$/;
    if val.present? && val.match(macID_regex)
      return true
    else
      return false
    end
  end

  def check_ip_range val
    v = val.split('.')
    ip = self.ip_address.split('.')
    mask = self.subnet_mask.split('.')
    nAddress = ''
    v_nAddress = ''
    ip.each_with_index do |value, index|
      nAddress += (ip[index].to_i & mask[index].to_i).to_s + "."
      v_nAddress += (v[index].to_i & mask[index].to_i).to_s + '.'
    end
    if(nAddress == v_nAddress)
      return true
    else
      return false
    end
  end

  def ip_range val
    check_ip_range(val) ? true : false
  end

  def dhcp_range_check val, i
    start_range = ""
    end_range = ""
    response = true
    v = val.split('.')[3].to_i
    self.dhcp_ranges.each_with_index do |ranges, index|
      next if index == i
      start_range = ranges["START"]
      end_range = ranges["END"]
      if((start_range == '' || end_range == '') || (v > end_range.split('.')[3].to_i && v > start_range.split('.')[3].to_i)|| (v < end_range.split('.')[3].to_i && v < start_range.split('.')[3].to_i) || v == '')
        response = true
      else
        response = false
        break
      end
    end
    return response
  end
end
