import { Neo4jTask, PaginatedResult, TaskFilterOptions } from './types.js';
/**
 * Service for managing Task entities in Neo4j
 */
export declare class TaskService {
    /**
     * Create a new task and optionally assign it to a user.
     * @param task Task data, including optional assignedTo for relationship creation
     * @returns The created task
     */
    static createTask(task: Omit<Neo4jTask, 'id' | 'createdAt' | 'updatedAt'> & {
        id?: string;
        assignedTo?: string;
    }): Promise<Neo4jTask>;
    /**
     * Link a Task to a Knowledge item with a specified relationship type.
     * @param taskId ID of the source Task item
     * @param knowledgeId ID of the target Knowledge item
     * @param relationshipType The type of relationship to create (e.g., 'ADDRESSES', 'REFERENCES') - Validation needed
     * @returns True if the link was created successfully, false otherwise
     */
    static linkTaskToKnowledge(taskId: string, knowledgeId: string, relationshipType: string): Promise<boolean>;
    /**
     * Get a task by ID, including the assigned user ID via relationship.
     * @param id Task ID
     * @returns The task with assignedToUserId property, or null if not found.
     */
    static getTaskById(id: string): Promise<(Neo4jTask & {
        assignedToUserId: string | null;
    }) | null>;
    /**
     * Check if all dependencies of a task are completed
     * @param taskId Task ID to check dependencies for
     * @returns True if all dependencies are completed, false otherwise
     */
    static areAllDependenciesCompleted(taskId: string): Promise<boolean>;
    /**
     * Update a task's properties and handle assignment changes via relationships.
     * @param id Task ID
     * @param updates Task updates, including optional assignedTo for relationship changes
     * @returns The updated task (without assignedTo property)
     */
    static updateTask(id: string, updates: Partial<Omit<Neo4jTask, 'id' | 'projectId' | 'createdAt' | 'updatedAt'>> & {
        assignedTo?: string | null;
    }): Promise<Neo4jTask>;
    /**
     * Delete a task
     * @param id Task ID
     * @returns True if deleted, false if not found
     */
    static deleteTask(id: string): Promise<boolean>;
    /**
     * Get tasks for a project with optional filtering and server-side pagination.
     * Includes assigned user ID via relationship.
     * @param options Filter and pagination options
     * @returns Paginated list of tasks including assignedToUserId
     */
    static getTasks(options: TaskFilterOptions): Promise<PaginatedResult<Neo4jTask & {
        assignedToUserId: string | null;
    }>>;
    /**
     * Add a dependency relationship between tasks
     * @param sourceTaskId ID of the dependent task (source)
     * @param targetTaskId ID of the dependency task (target)
     * @returns The IDs of the two tasks and the relationship ID
     */
    static addTaskDependency(sourceTaskId: string, targetTaskId: string): Promise<{
        id: string;
        sourceTaskId: string;
        targetTaskId: string;
    }>;
    /**
     * Remove a dependency relationship between tasks
     * @param dependencyId The ID of the dependency relationship to remove
     * @returns True if removed, false if not found
     */
    static removeTaskDependency(dependencyId: string): Promise<boolean>;
    /**
     * Get task dependencies (both dependencies and dependents)
     * @param taskId Task ID
     * @returns Object containing dependencies and dependents
     */
    static getTaskDependencies(taskId: string): Promise<{
        dependencies: {
            id: string;
            taskId: string;
            title: string;
            status: string;
            priority: string;
        }[];
        dependents: {
            id: string;
            taskId: string;
            title: string;
            status: string;
            priority: string;
        }[];
    }>;
    /**
     * Assign a task to a user by creating an ASSIGNED_TO relationship.
     * @param taskId Task ID
     * @param userId User ID
     * @returns The updated task (without assignedTo property)
     */
    static assignTask(taskId: string, userId: string): Promise<Neo4jTask>;
    /**
     * Unassign a task by deleting the ASSIGNED_TO relationship.
     * @param taskId Task ID
     * @returns The updated task (without assignedTo property)
     */
    static unassignTask(taskId: string): Promise<Neo4jTask>;
}
