import os
from dotenv import load_dotenv
from swarms.models import Anthropic, OpenAIChat
from swarms.prompts.accountant_swarm_prompts import (
    DECISION_MAKING_PROMPT,
    DOC_ANALYZER_AGENT_PROMPT,
    SUMMARY_GENERATOR_AGENT_PROMPT,
)
from swarms.structs import Agent
from swarms.utils.pdf_to_text import pdf_to_text

# Environment variables
load_dotenv()
anthropic_api_key = os.getenv("ANTHROPIC_API_KEY")
openai_api_key = os.getenv("OPENAI_API_KEY")


# Base llms
llm1 = OpenAIChat(
    openai_api_key=openai_api_key,
    max_tokens=5000,
)

llm2 = Anthropic(
    anthropic_api_key=anthropic_api_key,
    max_tokens=5000,
)


# Agents
doc_analyzer_agent = Agent(
    llm=llm2,
    sop=DOC_ANALYZER_AGENT_PROMPT,
    max_loops=1,
    autosave=True,
    saved_state_path="doc_analyzer_agent.json",
)
summary_generator_agent = Agent(
    llm=llm2,
    sop=SUMMARY_GENERATOR_AGENT_PROMPT,
    max_loops=1,
    autosave=True,
    saved_state_path="summary_generator_agent.json",
)
decision_making_support_agent = Agent(
    llm=llm2,
    sop=DECISION_MAKING_PROMPT,
    max_loops=1,
    saved_state_path="decision_making_support_agent.json",
)


pdf_path = "bankstatement.pdf"
fraud_detection_instructions = "Detect fraud in the document"
summary_agent_instructions = (
    "Generate an actionable summary of the document with action steps"
    " to take"
)
decision_making_support_agent_instructions = (
    "Provide decision making support to the business owner:"
)


# Transform the pdf to text
pdf_text = pdf_to_text(pdf_path)
print(pdf_text)


# Detect fraud in the document
fraud_detection_agent_output = doc_analyzer_agent.run(
    f"{fraud_detection_instructions}: {pdf_text}"
)

# Generate an actionable summary of the document
summary_agent_output = summary_generator_agent.run(
    f"{summary_agent_instructions}: {fraud_detection_agent_output}"
)

# Provide decision making support to the accountant
decision_making_support_agent_output = decision_making_support_agent.run(
    f"{decision_making_support_agent_instructions}:"
    f" {summary_agent_output}"
)
