In the Python file, you have a program that performs a GET request on the route https://coderbyte.com/api/challenges/json/date-list and then sort the object keys alphabetically. However, the sorting should be case-insensitive, and the original data structure should be preserved (e.g., lists should remain lists, dictionaries should remain dictionaries). Keep in mind that while the JSON format uses null, in Python, this is represented as None.

Next, remove any duplicate dictionaries from lists. Two dictionaries are considered duplicates if they have the same keys and values in the same order. Only the first occurrence should be preserved when an list contains duplicate dictionaries.

Finally, remove any dictionary properties with all values set to an empty string or None (equivalent to null in JSON), and print a list of modified dictionaries. Be sure to call json.dumps on the final list to convert it back to JSON format, where None in Python will be represented as null.

Example Input:

[{"name":"John","age":30,"city":"New York","country":"USA","Hobbies":["reading","swimming","hiking","swimming"],"occupation":"programmer","favorite_foods":{"Breakfast":"pancakes","Lunch":"","dinner":"pasta","Snack":""},"gear":{"type":"","material":"","color":null},"affiliations":["","",""],"friends":[{"name":"Jane","age":28,"city":"New York","country":"USA","occupation":null},{"name":"Tom","age":32,"city":"London","country":"UK","occupation":"teacher"},{"name":"Jane","age":28,"city":"New York","country":"USA","occupation":null}]}]

Example Output:
[{"age": 30, "city": "New York", "country": "USA", "favorite_foods": {"Breakfast": "pancakes", "dinner": "pasta"}, "friends": [{"age": 28, "city": "New York", "country": "USA", "name": "Jane"}, {"age": 32, "city": "London", "country": "UK", "name": "Tom", "occupation": "teacher"}], "gear": {}, "Hobbies": ["reading", "swimming", "hiking"], "name": "John", "occupation": "programmer"}]


fix this code

import requests
import json
from collections import OrderedDict

def case_insensitive_sort(obj):
  if isinstance(obj,dict):
    return OrderedDict(sorted(obj.items(), key=lambda x: x[0].lower()))
  elif isinstance(obj, list):
    return [case_insensitive_sort(item) for item in obj]
  return obj

def hash_dict(d):
  if isinstance(d, (tuple, list)):
    return tuple(hash_dict(e) for e in d)
  elif isinstance(d, dict):
    return tuple(sorted((k, hash_dict(v)) for k , v in d.items()))
  else:
    return d

def remove_duplicates(lst):
  seen = set()
  result = []
  for item in lst:
    item_hash = hash_dict(item)
    if item_hash not in seen:
      seen.add(item_hash)
      result.append(item)
  return result

def clean_empty_values(obj):
  if isinstance(obj, dict):
    return {k: clean_empty_values(v) for k,v in obj.items() if v not in (None, "", {}, [])}
  elif isinstance(obj,list):
    return [clean_empty_values(item) for item in obj if item not in( None, "", {}, [])]
  return obj

def procress_json(data):
  procressed_list = []

  for item in data:

    sorted_item = case_insensitive_sort(item)
    for key, value in sorted_item.items():

      if isinstance(value, list):
        sorted_item[key] = remove_duplicates(value)

    cleaned_item = clean_empty_values(sorted_item)
    procressed_list.append(cleaned_item)
  return procressed_list

response = requests.get("https://coderbyte.com/api/challenges/json/wizard-list")

if response.status_code == 200:
  data = response.json()
  procressed_data = procress_json(data)
  result = json.dumps(procressed_data)

print(result)