"""
Data models for the OpenRouter Agent.
"""

from typing import Dict, List, Any, Optional, Callable
from dataclasses import dataclass
from enum import Enum


class Role(Enum):
    """Message roles for the conversation"""
    SYSTEM = "system"
    USER = "user"
    ASSISTANT = "assistant"
    TOOL = "tool"


@dataclass
class Message:
    """Message structure for the conversation"""
    role: Role
    content: Optional[str] = None
    name: Optional[str] = None
    tool_calls: Optional[List[Dict[str, Any]]] = None
    tool_call_id: Optional[str] = None
    
    def to_dict(self) -> Dict[str, Any]:
        """Convert message to OpenRouter API format"""
        message_dict = {
            "role": self.role.value,
            "content": self.content if self.content is not None else ""
        }
        
        if self.name:
            message_dict["name"] = self.name
            
        if self.role == Role.ASSISTANT and self.tool_calls:
            message_dict["tool_calls"] = self.tool_calls
            
        if self.role == Role.TOOL and self.tool_call_id:
            message_dict["tool_call_id"] = self.tool_call_id
            
        return message_dict


@dataclass
class Tool:
    """Tool definition for function calling"""
    name: str
    description: str
    parameters: Dict[str, Any]
    function: Callable
    
    def to_dict(self) -> Dict[str, Any]:
        """Convert tool to OpenRouter API format"""
        return {
            "type": "function",
            "function": {
                "name": self.name,
                "description": self.description,
                "parameters": self.parameters
            }
        }