from dataclasses import dataclass

# These classes are for user facing column names, to avoid having to change them 
# all around the code when a modif is needed 
@dataclass
class ColumnContent:
    name: str
    type: str 

def fields(raw_class):
    return [v for k, v in raw_class.__dict__.items() if k[:2] != "__" and k[-2:] != "__"]

@dataclass(frozen=True)
class AutoEvalColumn: # Auto evals column
    model = ColumnContent("Model", "markdown")
    avg_wer = ColumnContent("Average WER ⬇️", "number")    
    rtf = ColumnContent("RTFx ⬆️️", "number")
    bulgarian_female = ColumnContent("Bulgarian female", "number")
    bulgarian_male = ColumnContent("Bulgarian male", "number")
    catalan_female = ColumnContent("Catalan female", "number")
    chinese_female = ColumnContent("Chinese female", "number")
    chinese_male = ColumnContent("Chinese male", "number")
    eastern_european_male = ColumnContent("Eastern European male", "number")
    european_male = ColumnContent("European male", "number")
    french_female = ColumnContent("French female", "number")
    ghanain_english_female = ColumnContent("Ghanain English female", "number")
    indian_english_female = ColumnContent("Indian English female", "number")
    indian_english_male = ColumnContent("Indian English male", "number")
    indonesian_female = ColumnContent("Indonesian female", "number")
    irish_english_female = ColumnContent("Irish English female", "number")
    irish_english_male = ColumnContent("Irish English male", "number")
    israeli_male = ColumnContent("Israeli male", "number")
    italian_female = ColumnContent("Italian female", "number")
    jamaican_english_female = ColumnContent("Jamaican English female", "number")
    jamaican_english_male = ColumnContent("Jamaican English male", "number")
    kenyan_english_female = ColumnContent("Kenyan English female", "number")
    kenyan_english_male = ColumnContent("Kenyan English male", "number")
    latin_american_female = ColumnContent("Latin American female", "number")
    latin_american_male = ColumnContent("Latin American male", "number")
    lithuanian_male = ColumnContent("Lithuanian male", "number")
    mainstream_us_english_female = ColumnContent("Mainstream US English female", "number")
    mainstream_us_english_male = ColumnContent("Mainstream US English male", "number")
    nigerian_english_female = ColumnContent("Nigerian English female", "number")
    nigerian_english_male = ColumnContent("Nigerian English male", "number")
    romanian_female = ColumnContent("Romanian female", "number")
    scottish_english_male = ColumnContent("Scottish English male", "number")
    southern_british_english_male = ColumnContent("Southern British English male", "number")
    spanish_female = ColumnContent("Spanish female", "number")
    spanish_male = ColumnContent("Spanish male", "number")
    vietnamese_female = ColumnContent("Vietnamese female", "number")
    vietnamese_male = ColumnContent("Vietnamese male", "number")

def make_clickable_model(model_name):
    link = f"https://huggingface.co/{model_name}"
    return f'<a target="_blank" href="{link}" style="color: var(--link-text-color); text-decoration: underline;text-decoration-style: dotted;">{model_name}</a>'

def styled_error(error):
    return f"<p style='color: red; font-size: 20px; text-align: center;'>{error}</p>"

def styled_warning(warn):
    return f"<p style='color: orange; font-size: 20px; text-align: center;'>{warn}</p>"

def styled_message(message):
    return f"<p style='color: green; font-size: 20px; text-align: center;'>{message}</p>"