o
    "i$                     @   sr   d Z ddlmZmZ ddlmZ ddlmZ ddlm	Z	m
Z
 ddlmZmZ G dd dee	eef Zee	Zd	S )
z"
CRUD operations for Agent model.
    )OptionalList)Session)CRUDBase)AgentChatMessage)AgentCreateAgentUpdatec                   @   s  e Zd ZdZdededee fddZdddded	e	d
ee dee dee f
ddZ
ddddedededededee fddZdddddeded
ee dededee fddZdddededede	dedee fddZd dd!deded"ededee f
d#d$ZdS )%	CRUDAgentz*
    CRUD operations for Agent model.
    dbidreturnc                C   s   | j ||dS )z5Alias for delete() method for backward compatibility.)r   )delete)selfr   r    r   6/lsinfo/ai/hellotax_ai/base_platform/app/crud/agent.pyremove   s   zCRUDAgent.removeN)
created_by	tenant_idnamer   r   c                C   sT   | ttj|k}|r|tj|k}|dur&ttdr&|tj|k}| S )a  
        Get agent by name.

        Args:
            db: Database session
            name: Agent name
            created_by: Optional user ID to filter by creator
            tenant_id: Optional tenant ID for filtering

        Returns:
            Agent instance or None
        Nr   )queryr   filterr   r   hasattrr   first)r   r   r   r   r   r   r   r   r   get_by_name   s   zCRUDAgent.get_by_namer   d   )skiplimitmodel_idr   r   c                C   s.   | ttj|ktj|k|| S )aK  
        Get agents using a specific model.

        Args:
            db: Database session
            model_id: Model ID
            tenant_id: Tenant ID for filtering
            skip: Number of records to skip
            limit: Maximum number of records to return

        Returns:
            List of agent instances
        )r   r   r   r   r   offsetr   all)r   r   r   r   r   r   r   r   r   get_by_model3   s   
zCRUDAgent.get_by_model)r   r   r   c                C   sF   | ttjdktj|k}|r|tj|k}||| S )aa  
        Get active agents.

        Args:
            db: Database session
            tenant_id: Tenant ID for filtering
            created_by: Optional user ID to filter by creator
            skip: Number of records to skip
            limit: Maximum number of records to return

        Returns:
            List of active agent instances
        active)	r   r   r   statusr   r   r   r   r    )r   r   r   r   r   r   r   r   r   r   get_active_agentsN   s   
zCRUDAgent.get_active_agentsT)commitagent_idr#   r%   c                C   sT   | ttj|ktj|k }|sdS ||_|| |r(|  |	| |S )a\  
        Update agent status.

        Args:
            db: Database session
            agent_id: Agent ID
            tenant_id: Tenant ID for filtering
            status: New status (active, inactive, etc.)
            commit: Whether to commit the transaction

        Returns:
            Updated agent instance or None if not found
        N)
r   r   r   r   r   r   r#   addr%   refresh)r   r   r&   r   r#   r%   agentr   r   r   update_statusn   s   


zCRUDAgent.update_statusF)softr%   r+   c                C   sz   | ttj|k }|sdS | ttj|kjdd |r0ttdr0d|_	|
| n|| |r;|  |S )am  
        Delete an agent and all associated chat messages.

        Args:
            db: Database session
            id: Agent ID to delete
            soft: Whether to perform soft delete (set is_deleted=True)
            commit: Whether to commit the transaction (default: True)

        Returns:
            Deleted agent instance or None if not found
        NF)synchronize_session
is_deletedT)r   r   r   r   r   r   r&   r   r   r-   r'   r%   )r   r   r   r+   r%   r)   r   r   r   r      s   
zCRUDAgent.delete)__name__
__module____qualname____doc__r   intr   r   r   strr   r   r!   r$   boolr*   r   r   r   r   r   r
      s    	
$
 
'
,r
   N)r1   typingr   r   sqlalchemy.ormr   app.crud.baser   app.models.agentr   r   app.schemas.agentr   r	   r
   r)   r   r   r   r   <module>   s     5