import json
import panel as pn
from sentrifyai import api
import asyncio

pn.extension(sizing_mode="stretch_width")

ICON_URLS = {
    
}

async def classify_emotion(message: str):
    emotions = api.Emotions()
    try:
        results = emotions.emotion(model_slug='Emotion-1.0', message=message)
        json_results = json.dumps(results, indent=4)
        return json_results
    except Exception as e:
        return json.dumps({"error": str(e)}, indent=4)

async def process_inputs(message: str, panel_content):
    try:
        main.disabled = True
        
        results = await classify_emotion(message)
        
        # Display results
        panel_content.append("##### 🎉 Emotion Classification Results:")
        panel_content.append(results)
    
    finally:
        main.disabled = False

# Create widgets
message_input = pn.widgets.TextInput(
    name="Enter a message for emotion classification",
    placeholder="Type your message here...",
    sizing_mode="stretch_width"
)

classify_button = pn.widgets.Button(name="Classify Emotion", button_type="primary")

# Define callback function for button click
def on_button_click(event):
    message = message_input.value
    if message:
        panel_content.clear()
        asyncio.create_task(process_inputs(message, panel_content))

classify_button.on_click(on_button_click)

# Create main panel content
panel_content = pn.Column(
    "### 😊 Emotion Classification",
    message_input,
    classify_button,
)

# Add footer
footer_row = pn.Row(pn.Spacer(), align="center")
for icon, url in ICON_URLS.items():
    href_button = pn.widgets.Button(icon=icon, width=35, height=35)
    href_button.js_on_click(code=f"window.open('{url}')")
    footer_row.append(href_button)
footer_row.append(pn.Spacer())

# Create dashboard
main = pn.Column(
    panel_content,
    footer_row,
)

title = "Emotion Classification"
pn.template.MaterialTemplate(
    title=title,
    main=main,
    header_background="#F08080",
).servable(title=title)