import { AgentScopeConfig } from "../../db/manage/scope-definitions.js";
import { PaginationConfig } from "../../types/utility.js";
import { AgentsManageDatabaseClient } from "../../db/manage/manage-client.js";
import { FunctionToolApiInsert, FunctionToolApiUpdate } from "../../types/entities.js";

//#region src/data-access/manage/functionTools.d.ts
/**
 * Get a function tool by ID (agent-scoped)
 */
declare const getFunctionToolById: (db: AgentsManageDatabaseClient) => (params: {
  scopes: AgentScopeConfig;
  functionToolId: string;
}) => Promise<{
  createdAt: string;
  updatedAt: string;
  functionId: string;
  name: string;
  description: string | null;
  agentId: string;
  projectId: string;
  tenantId: string;
  id: string;
}>;
/**
 * List function tools (agent-scoped)
 */
declare const listFunctionTools: (db: AgentsManageDatabaseClient) => (params: {
  scopes: AgentScopeConfig;
  pagination?: PaginationConfig;
}) => Promise<{
  data: {
    createdAt: string;
    updatedAt: string;
    functionId: string;
    name: string;
    description: string | null;
    agentId: string;
    projectId: string;
    tenantId: string;
    id: string;
  }[];
  pagination: {
    page: number;
    limit: number;
    total: number;
    pages: number;
  };
}>;
/**
 * Create a function tool (agent-scoped)
 */
declare const createFunctionTool: (db: AgentsManageDatabaseClient) => (params: {
  data: FunctionToolApiInsert;
  scopes: AgentScopeConfig;
}) => Promise<{
  id: string;
  name: string;
  description: string | null;
  createdAt: string;
  updatedAt: string;
  tenantId: string;
  projectId: string;
  agentId: string;
  functionId: string;
}>;
/**
 * Update a function tool (agent-scoped)
 */
declare const updateFunctionTool: (db: AgentsManageDatabaseClient) => (params: {
  scopes: AgentScopeConfig;
  functionToolId: string;
  data: FunctionToolApiUpdate;
}) => Promise<{
  createdAt: string;
  updatedAt: string;
  functionId: string;
  name: string;
  description: string | null;
  agentId: string;
  projectId: string;
  tenantId: string;
  id: string;
}>;
/**
 * Delete a function tool (agent-scoped)
 */
declare const deleteFunctionTool: (db: AgentsManageDatabaseClient) => (params: {
  scopes: AgentScopeConfig;
  functionToolId: string;
}) => Promise<boolean>;
/**
 * Upsert a function tool (create if it doesn't exist, update if it does)
 */
declare const upsertFunctionTool: (db: AgentsManageDatabaseClient) => (params: {
  data: FunctionToolApiInsert;
  scopes: AgentScopeConfig;
}) => Promise<{
  id: string;
  name: string;
  description: string | null;
  createdAt: string;
  updatedAt: string;
  tenantId: string;
  projectId: string;
  agentId: string;
  functionId: string;
}>;
declare const getFunctionToolsForSubAgent: (db: AgentsManageDatabaseClient) => (params: {
  scopes: AgentScopeConfig;
  subAgentId: string;
  pagination?: PaginationConfig;
}) => Promise<{
  data: {
    id: string;
    name: string;
    description: string | null;
    functionId: string;
    createdAt: string;
    updatedAt: string;
    tenantId: string;
    projectId: string;
    agentId: string;
    relationshipId: string;
    toolPolicies: Record<string, {
      needsApproval?: boolean;
    }> | null;
  }[];
  pagination: {
    page: number;
    limit: number;
    total: number;
    pages: number;
  };
}>;
/**
 * Upsert a sub_agent-function tool relation (create if it doesn't exist, update if it does)
 */
declare const upsertSubAgentFunctionToolRelation: (db: AgentsManageDatabaseClient) => (params: {
  scopes: AgentScopeConfig;
  subAgentId: string;
  functionToolId: string;
  toolPolicies?: Record<string, {
    needsApproval?: boolean;
  }> | null;
  relationId?: string;
}) => Promise<{
  id: string;
}>;
/**
 * Add a function tool to an agent
 */
declare const addFunctionToolToSubAgent: (db: AgentsManageDatabaseClient) => (params: {
  scopes: AgentScopeConfig;
  subAgentId: string;
  functionToolId: string;
  toolPolicies?: Record<string, {
    needsApproval?: boolean;
  }> | null;
}) => Promise<{
  id: string;
  createdAt: string;
  updatedAt: string;
  tenantId: string;
  projectId: string;
  agentId: string;
  toolPolicies: Record<string, {
    needsApproval?: boolean;
  }> | null;
  subAgentId: string;
  functionToolId: string;
}>;
/**
 * Update an agent-function tool relation
 */
declare const updateSubAgentFunctionToolRelation: (db: AgentsManageDatabaseClient) => (params: {
  scopes: AgentScopeConfig;
  relationId: string;
  data: {
    subAgentId: string;
    functionToolId: string;
    toolPolicies?: Record<string, {
      needsApproval?: boolean;
    }> | null;
  };
}) => Promise<{
  id: string;
}>;
/**
 * Get all sub-agents that use a specific function tool
 */
declare const getSubAgentsUsingFunctionTool: (db: AgentsManageDatabaseClient) => (params: {
  scopes: AgentScopeConfig;
  functionToolId: string;
}) => Promise<{
  subAgentId: string;
  createdAt: string;
}[]>;
/**
 * Remove a function tool from a sub-agent
 */
declare const removeFunctionToolFromSubAgent: (db: AgentsManageDatabaseClient) => (params: {
  scopes: AgentScopeConfig;
  subAgentId: string;
  functionToolId: string;
}) => Promise<boolean>;
/**
 * Check if a function tool is associated with a sub-agent
 */
declare const isFunctionToolAssociatedWithSubAgent: (db: AgentsManageDatabaseClient) => (params: {
  scopes: AgentScopeConfig;
  subAgentId: string;
  functionToolId: string;
}) => Promise<boolean>;
/**
 * Associate a function tool with a sub-agent (alias for addFunctionToolToSubAgent)
 */
declare const associateFunctionToolWithSubAgent: (db: AgentsManageDatabaseClient) => (params: {
  scopes: AgentScopeConfig;
  subAgentId: string;
  functionToolId: string;
  toolPolicies?: Record<string, {
    needsApproval?: boolean;
  }> | null;
}) => Promise<{
  id: string;
  createdAt: string;
  updatedAt: string;
  tenantId: string;
  projectId: string;
  agentId: string;
  toolPolicies: Record<string, {
    needsApproval?: boolean;
  }> | null;
  subAgentId: string;
  functionToolId: string;
}>;
//#endregion
export { addFunctionToolToSubAgent, associateFunctionToolWithSubAgent, createFunctionTool, deleteFunctionTool, getFunctionToolById, getFunctionToolsForSubAgent, getSubAgentsUsingFunctionTool, isFunctionToolAssociatedWithSubAgent, listFunctionTools, removeFunctionToolFromSubAgent, updateFunctionTool, updateSubAgentFunctionToolRelation, upsertFunctionTool, upsertSubAgentFunctionToolRelation };