import os

from dotenv import load_dotenv

from swarms.models import GPT4VisionAPI
from swarms.prompts.personal_stylist import (
    ACCESSORIES_STYLIST_AGENT_PROMPT,
    BEARD_STYLIST_AGENT_PROMPT,
    CLOTHING_STYLIST_AGENT_PROMPT,
    HAIRCUT_STYLIST_AGENT_PROMPT,
    MAKEUP_STYLIST_AGENT_PROMPT,
)
from swarms.structs import Agent

# Load environment variables
load_dotenv()
api_key = os.getenv("OPENAI_API_KEY")

# Initialize GPT4VisionAPI
llm = GPT4VisionAPI(openai_api_key=api_key)

# User selfie and clothes images
user_selfie = "user_image.jpg"
clothes_image = "clothes_image2.jpg"

# User gender (for conditional agent initialization)
user_gender = "man"  # or "woman"

# Initialize agents with respective prompts for personal styling
haircut_stylist_agent = Agent(
    llm=llm,
    sop=HAIRCUT_STYLIST_AGENT_PROMPT,
    max_loops=1,
    multi_modal=True,
)

# Conditional initialization of Makeup or Beard Stylist Agent
if user_gender == "woman":
    makeup_or_beard_stylist_agent = Agent(
        llm=llm,
        sop=MAKEUP_STYLIST_AGENT_PROMPT,
        max_loops=1,
        multi_modal=True,
    )
elif user_gender == "man":
    makeup_or_beard_stylist_agent = Agent(
        llm=llm,
        sop=BEARD_STYLIST_AGENT_PROMPT,
        max_loops=1,
        multi_modal=True,
    )

clothing_stylist_agent = Agent(
    llm=llm,
    sop=CLOTHING_STYLIST_AGENT_PROMPT,
    max_loops=1,
    multi_modal=True,
)

accessories_stylist_agent = Agent(
    llm=llm,
    sop=ACCESSORIES_STYLIST_AGENT_PROMPT,
    max_loops=1,
    multi_modal=True,
)

# Run agents with respective tasks
haircut_suggestions = haircut_stylist_agent.run(
    (
        "Suggest suitable haircuts for this user, considering their"
        " face shape and hair type."
    ),
    user_selfie,
)

# Run Makeup or Beard agent based on gender
if user_gender == "woman":
    makeup_suggestions = makeup_or_beard_stylist_agent.run(
        (
            "Recommend makeup styles for this user, complementing"
            " their features."
        ),
        user_selfie,
    )
elif user_gender == "man":
    beard_suggestions = makeup_or_beard_stylist_agent.run(
        (
            "Provide beard styling advice for this user, considering"
            " their face shape."
        ),
        user_selfie,
    )

clothing_suggestions = clothing_stylist_agent.run(
    (
        "Match clothing styles and colors for this user, using color"
        " matching principles."
    ),
    clothes_image,
)

accessories_suggestions = accessories_stylist_agent.run(
    (
        "Suggest accessories to complement this user's outfit,"
        " considering the overall style."
    ),
    clothes_image,
)
