class SessionState:
    session_stage = ""
    do_evaluation = False
    do_opportunity_analysis = False
    do_customer_research = False
    do_objections = False
    add_objections_to_analysis = True   
    ask_objections = True
    use_objection_cache = True
    do_ragas_evaluation = False
    customer_research_report_md = "HSBC Quarterly Report 2024-10-19.md"
    customer_research_report_pdf = "HSBC Quarterly Report 2024-10-19.pdf"
    bettetech_value_proposition_pdf = "BetterTech Lending Analytics Solution.pdf"
    do_voice = True
    status = "active"
    scenario = None
    qa_mode = "single"
    questions = []
    start_time = None
    end_time = None
    duration_minutes = None
    attitude = "Happy"
    mood_score = 5
    num_questions = 2
    current_question_index = 0
    previous_answer = None
    question = ""
    ground_truth = ""
    rep_answer = ""
    responses = []
    queries = []
    llm_responses = []
    command = ""
    scores = []
    llm_next_steps = ""
    opportunity_review_results = None
    opportunity_review_report = None
    def __init__(self):
        self.company = None
        self.customer = None
        self.opportunity = None
        self.scenario = None
        self.session_stage = "research"
        self.do_evaluation = False
        self.do_opportunity_analysis = False
        self.do_customer_research = False
        self.do_objections = False
        self.add_objections_to_analysis = True
        self.ask_objections = True
        self.use_objection_cache = True
        self.do_ragas_evaluation = False
        self.customer_research_report_md = "HSBC Quarterly Report 2024-10-19.md"
        self.customer_research_report_pdf = "HSBC Quarterly Report 2024-10-19.pdf"
        self.bettetech_value_proposition_pdf = "BetterTech Lending Analytics Solution.pdf"
        self.do_voice = True
        self.status = "active"
        self.scenario = None
        self.qa_mode = "single"
        self.questions = []
        self.start_time = None
        self.end_time = None
        self.duration_minutes = None
        self.attitude = "Happy"
        self.mood_score = 5
        self.num_questions = 2
        self.current_question_index = 0
        self.previous_answer = None
        self.question = ""
        self.ground_truth = ""
        self.rep_answer = ""
        self.responses = []
        self.queries = []
        self.llm_responses = []
        self.command = ""
        self.scores = []
        self.llm_next_steps = ""
        self.company = None
        self.customer = None
        self.opportunity = None
        self.scenario = None
        self.opportunity_review_results = None
        self.opportunity_review_report = None
    class Company:
        def __init__(self, name, description, product, product_summary, product_description):
            self.name = name
            self.description = description
            self.product = product
            self.product_summary = product_summary
            self.product_description = product_description

    class Customer:
        def __init__(self, name, contact_name, contact_role):
            self.name = name
            self.contact_name = contact_name
            self.contact_role = contact_role
            self.background = None


    class Opportunity:
        def __init__(self, id, name, stage, description, value, close_date, activity, next_steps):
            self.id = id
            self.name = name
            self.stage = stage
            self.description = description
            self.value = value
            self.close_date = close_date
            self.activity = activity
            self.next_steps = next_steps
            


    def add_company_info(self, name, description, product, product_summary, product_description):
        self.company = self.Company(name, description, product, product_summary, product_description)

    def add_customer_info(self, name, contact_name, contact_role):
        self.customer = self.Customer(name, contact_name, contact_role)

    def add_opportunity_info(self, id, name, stage, description, value, close_date, activity, next_steps):
        self.opportunity = self.Opportunity(id, name, stage, description, value, close_date, activity, next_steps) 

    def add_scenario_info(self, scenario_data):
        self.scenario = scenario_data
        self.add_opportunity_info(
            id=scenario_data['Opportunity ID'],
            name=scenario_data['Opportunity Name'],
            stage=scenario_data['Opportunity Stage'],
            description=scenario_data['Opportunity Description'],
            value=scenario_data['Opportunity Value'],
            close_date=scenario_data['Close Date'],
            activity=scenario_data['Activity'],
            next_steps=scenario_data['Next Steps']  
        )
        self.add_customer_info(
            name=scenario_data['Customer Name'],
            contact_name=scenario_data['Customer Contact'],
            contact_role=scenario_data['Customer Contact Role']
        )

    def get_opening(self):
        output_lines = [
            "**Simulation Scenario**",
            f"**Customer:** {self.customer.name if self.customer else 'Unknown'}",
            f"**Opportunity:** {self.opportunity.name if self.opportunity else 'Unknown'}",
            f"**Value:** {self.opportunity.value if self.opportunity and hasattr(self.opportunity, 'value') else 'Unknown'}",
            f"**Stage:** {self.opportunity.stage if self.opportunity else 'N/A'}",
            f"**Target Close Date:** {self.opportunity.close_date if self.opportunity and hasattr(self.opportunity, 'close_date') else 'Unknown'}",
            f"**Opportunity Description:** {self.opportunity.description if self.opportunity else 'Unknown'}",
            f"**Meeting with:** {self.customer.contact_name} ({self.customer.contact_role})",
            f"**Activity:** {self.opportunity.activity if self.opportunity and hasattr(self.opportunity, 'activity') else 'Unknown'}",
            f"**Current Meeting:** {self.opportunity.next_steps if self.opportunity and hasattr(self.opportunity, 'next_steps') else 'Unknown'}"
        ]
        output = "\n".join(output_lines)
        return output
    
    def __str__(self):
        company_info = f"{self.company.name} - " if self.company else ""
        customer_info = f"for {self.customer.name}" if self.customer else "No Customer"
        opportunity_info = f"{self.opportunity.name} ({self.opportunity.stage})" if self.opportunity else "No opportunity set"
        return f"{company_info}SessionState: {customer_info} {opportunity_info}".strip()