"""
Helper to load admin-overridden prompts from the database.
Falls back to None if no override exists, letting callers use their hardcoded defaults.
"""


def get_dynamic_prompt(service_key, project_name="", project_description="", language="ar", **extra_vars):
    """
    Check if an admin has set a custom prompt for this service.
    Returns list of messages if override exists, or None to use default.

    The system_prompt and user_prompt_template support these placeholders:
      {project_name}, {project_description}, {language}, {lang_instruction}
      Plus any extra_vars passed as kwargs.
    """
    try:
        from app.models.features import SystemPrompt
        system_text, user_template = SystemPrompt.get_prompt(service_key)
    except Exception:
        return None

    if not system_text:
        return None

    lang_instruction = "Respond entirely in Arabic." if language == "ar" else "Respond entirely in English."

    fmt = {
        "project_name": project_name,
        "project_description": project_description,
        "language": language,
        "lang_instruction": lang_instruction,
        **extra_vars,
    }

    try:
        system_content = system_text.format(**fmt)
    except (KeyError, IndexError):
        system_content = system_text

    messages = [{"role": "system", "content": system_content}]

    if user_template:
        try:
            user_content = user_template.format(**fmt)
        except (KeyError, IndexError):
            user_content = user_template
        messages.append({"role": "user", "content": user_content})
    else:
        # Build a basic user message if no template provided
        messages.append({
            "role": "user",
            "content": f"Business Idea: {project_name}\n\nDescription: {project_description}"
        })

    return messages
