from langchain.prompts import ChatPromptTemplate # type: ignore
from langchain_core.output_parsers import StrOutputParser # type: ignore
from Ai_Agents.models.language_model import llm
from langchain_core.runnables import RunnableParallel # type: ignore
from Ai_Agents.services.templates.character_template import CHARACTER_TEMPLATE



def generate_objective_response(
    objective: str,
    name: str,
    gender: str,
    backstory: str
) -> str:
    
    # Original objective template remains unchanged
    base_template = """
    Current Mission: {objective}
    
    Generate response that:
    - Directly fulfills the objective
    - Uses your character's unique voice
    - Feels natural and conversational
    """
    
    # Combine templates using Langchain's Runnable
    full_prompt = RunnableParallel({
        "character": ChatPromptTemplate.from_template(CHARACTER_TEMPLATE),
        "task": ChatPromptTemplate.from_template(base_template)
    })
    
    # Final assembly
    final_template = """
    {character}
    
    {task}
    
    Response Requirements:
    - Style: Match backstory's tone
    - Focus: Pure objective execution
    """
    
    chain = (
        full_prompt |
        ChatPromptTemplate.from_template(final_template) |
        llm |
        StrOutputParser()
    )
    
    return chain.invoke({
        "name": name,
        "gender": gender,
        "backstory": backstory,
        "objective": objective
    })

