import pickle
import os
import logging

logger = logging.getLogger(__name__)

def train_model(client_id, courses_data, users_data, competency_data, top_rated_courses):
    """
    Train models for a specific client using their data.

    Parameters:
    client_id (str): The client identifier
    courses_data (list): List of course data objects
    users_data (dict): Dictionary of user data objects
    competency_data (list): List of competency data objects
    top_rated_courses (list): List of top-rated courses
    """
    try:
        # Create a single trained model for this specific client
        trained_model = {
            'courses_data': courses_data,
            'users_data': users_data,
            'competency_data': competency_data,
            'top_rated_courses': top_rated_courses,
        }

        # Return a dictionary with client_id as key and trained model as value
        return {client_id: trained_model}
    except Exception as e:
        logging.error(f"Error training model for client {client_id}: {str(e)}")
        raise e


def save_model(trained_models, directory="trained_models"):
    try:
        for client_id, trained_model in trained_models.items():
            model_path = os.path.join(directory, f"model_{client_id}.pkl")
            os.makedirs(os.path.dirname(model_path), exist_ok=True)
            with open(model_path, "wb") as file:
                pickle.dump(trained_model, file)
    except Exception as e:
        logger.exception("Failed to save model")
        raise e
