from typing import Any, Dict, Tuple, List
from app.core.database.operations import get_items_from_database
from app.models.registry import MODEL_REGISTRY


# Returns a dictionary mapping the id to the relevant data gotten from the
# model
def get_options_service(model_name: str) -> Tuple[Dict[str, Any], List[int]]:
    if model_name not in MODEL_REGISTRY:
        return ({'error': 'Nepostojeći model'}, [400])

    model_metadata = MODEL_REGISTRY[model_name]['metadata']
    table_name = model_metadata['table_name']

    data = get_items_from_database(table_name=table_name)
    if isinstance(data, dict) and 'error' in data:
        return ({'error': data}, [500])

    # Get fields used as labels for select box options
    label_fields = [field_name for field_name, meta in model_metadata.get(
        'columns', {}).items() if meta.get('use_as_option_identifier')]

    # Reduce each object to only the label fields
    reduced_data = {
        obj['id']: {field: obj[field] for field in label_fields if field in obj}
        for obj in data
    }

    return (reduced_data, [200])
