"""
Author: Daniel Kim
Modified by: Richard Wong
"""
# %%
import re
import pandas as pd
from replacement_dict import desc_replacement_dict, unit_replacement_dict

# %%
def count_abbreviation_occurrences(tag_descriptions, abbreviation):
    """Count the number of occurrences of the abbreviation in the list of machine descriptions."""
    pattern = re.compile(abbreviation)
    count = sum(len(pattern.findall(description)) for description in tag_descriptions)
    return count

def replace_abbreviations(tag_descriptions, abbreviations):
    """Replace the abbreviations according to the key-pair value provided."""
    replaced_descriptions = []
    for description in tag_descriptions:
        for abbreviation, replacement in abbreviations.items():
            description = re.sub(abbreviation, replacement, description)

        replaced_descriptions.append(description)
    return replaced_descriptions

def cleanup_spaces(tag_descriptions):
    # Replace all whitespace with a single space
    replaced_descriptions = []
    for description in tag_descriptions:
        description_clean = re.sub(r'\s+', ' ', description)
        replaced_descriptions.append(description_clean)
    return replaced_descriptions

# remove all dots
def cleanup_dots(tag_descriptions):
    replaced_descriptions = []
    for description in tag_descriptions:
        description_clean = re.sub(r'\.', '', description)
        replaced_descriptions.append(description_clean)
    return replaced_descriptions


# %%
file_path = '../../data_import/exports/raw_data.csv'  # Adjust this path to your actual file location
df = pd.read_csv(file_path)

# %%
# Replace abbreviations
print("running substitution for descriptions")
df['tag_description']= df['tag_description'].fillna("NOVALUE")
# Replace whitespace-only entries with "NOVALUE"
# note that "N/A" can be read as nan
# replace whitespace only values as NOVALUE
df['tag_description'] = df['tag_description'].replace(r'^\s*$', 'NOVALUE', regex=True)
tag_descriptions = df['tag_description']
replaced_descriptions = replace_abbreviations(tag_descriptions, desc_replacement_dict)
replaced_descriptions = cleanup_spaces(replaced_descriptions)
replaced_descriptions = cleanup_dots(replaced_descriptions)
df["tag_description"] = replaced_descriptions
# print("Descriptions after replacement:", replaced_descriptions)
# strip trailing whitespace
df['tag_description'] = df['tag_description'].str.rstrip()
df['tag_description'] = df['tag_description'].str.upper()

# %%
print("running substitutions for units")
df['unit'] = df['unit'].fillna("NOVALUE")
df['unit'] = df['unit'].replace(r'^\s*$', 'NOVALUE', regex=True)
unit_list = df['unit']
new_unit = replace_abbreviations(unit_list, unit_replacement_dict)
new_unit = cleanup_spaces(new_unit)
df['unit'] = new_unit


# save
df.to_csv("../exports/preprocessed_data.csv", index=False)
print("file saved")
