input: Write a function to generate n-grams of the given text with a specified window size. Return a Counter object containing the frequency of each n-gram. The function should handle text normalization by converting it to lowercase and splitting it into words. If the input text is empty, return an empty Counter.
  
  from collections import Counter
  
  
  def generate_ngrams(text, window_size):
      text = text.lower().split(' ')
      ngrams = []
      for n in range(window_size, len(text)+1):
          for i in range(len(text)-n+1):
              ngrams.append(' '.join(text[i:i+n]))
      return Counter(ngrams)
  
  
  assert generate_ngrams("The quick brown fox jumps over the lazy dog", 3) == Counter({'the quick brown': 3, 'quick brown fox': 2, 'brown fox jumps': 1, 'fox jumps over': 1, 'jumps over the': 1, 'over the lazy': 1, 'the lazy dog': 1, 'quick brown fox jumps': 1})
  assert generate_ngrams("The quick brown fox", 2) == Counter({'the quick': 1, 'quick brown': 1, 'brown fox': 1, 'the quick brown': 1})
  assert generate_ngrams("", 3) == Counter()
  assert generate_ngrams("a a a", 1) == Counter({'a': 3})
  assert generate_ngrams("a b c d", 4) == Counter({'a b c d': 1})
output: 
  def generate_ngrams(text, window_size):
      if not text:
          return Counter()
      text = text.lower().split(' ')
      ngrams = []
      for n in range(window_size, len(text)+1):
          for i in range(len(text)-n+1):
              ngrams.append(' '.join(text[i:i+n]))
      return Counter(ngrams)
  