from typing import List
from definitions.attributes import *

def validate_config(item_attributes: List[Attribute]) -> str:
    """
    Validate the configuration file to ensure all attributes are properly defined.
    Returns "Ok" if everything is valid, otherwise returns an error message.
    """
    if not item_attributes:
        return "Configuration must contain at least one attribute."
    
    attrib_names = [attrib.attrib_name for attrib in item_attributes]
    attrib_name_set = set(attrib_names)
    
    # Check for duplicate attribute names
    if len(attrib_names) != len(attrib_name_set):
        return "Duplicate attribute names are not allowed."

    # Map attribute names to their objects
    attrib_map = {attrib.attrib_name: attrib for attrib in item_attributes}

    # Validate each attribute
    for attrib in item_attributes:
        error = attrib.validate()
        if error:
            return error

        # Validate comparison (if applicable)
        if attrib.compareto:
            return f"'{attrib.attrib_name}': 'compareto' feature is not fully implemented in this release."
            ''' WIP
            if not isinstance(attrib.compareto, list) or not all(
                isinstance(pair, tuple) and len(pair) == 2 for pair in attrib.compareto
            ):
                return f"Invalid comparison format for attribute '{attrib.attrib_name}'. Expected a list of tuples."
            for cmp, ref_attr_name in attrib.compareto:
                if cmp not in VALID_COMPARISONS[attrib.html_input_type]:
                    return f"Invalid comparison '{cmp}' for attribute '{attrib.attrib_name}'. Allowed operators are: {VALID_COMPARISONS[attrib.html_input_type]}"
                if ref_attr_name not in attrib_name_set:
                    return f"Invalid reference attribute '{ref_attr_name}' for comparison in attribute '{attrib.attrib_name}'."
                ref_attr = attrib_map[ref_attr_name]
                if ref_attr.html_input_type != attrib.html_input_type:
                    return f"Invalid comparison of '{attrib.attrib_name}' & '{ref_attr_name}' - must be of the same type, {attrib.html_input_type}."
            '''

    return "Ok"