import { Neo4jProject, PaginatedResult, ProjectDependencyType, // Import the new enum
ProjectFilterOptions } from './types.js';
/**
 * Service for managing Project entities in Neo4j
 */
export declare class ProjectService {
    /**
     * Create a new project
     * @param project Project data
     * @returns The created project
     */
    static createProject(project: Omit<Neo4jProject, 'id' | 'createdAt' | 'updatedAt'> & {
        id?: string;
    }): Promise<Neo4jProject>;
    /**
     * Get a project by ID
     * @param id Project ID
     * @returns The project or null if not found
     */
    static getProjectById(id: string): Promise<Neo4jProject | null>;
    /**
     * Check if all dependencies of a project are completed
     * @param projectId Project ID to check dependencies for
     * @returns True if all dependencies are completed, false otherwise
     */
    static areAllDependenciesCompleted(projectId: string): Promise<boolean>;
    /**
     * Update a project
     * @param id Project ID
     * @param updates Project updates
     * @returns The updated project
     */
    static updateProject(id: string, updates: Partial<Omit<Neo4jProject, 'id' | 'createdAt' | 'updatedAt'>>): Promise<Neo4jProject>;
    /**
     * Delete a project and all its associated tasks and knowledge items
     * @param id Project ID
     * @returns True if deleted, false if not found
     */
    static deleteProject(id: string): Promise<boolean>;
    /**
     * Get all projects with optional filtering and pagination
     * @param options Filter and pagination options
     * @returns Paginated list of projects
     */
    static getProjects(options?: ProjectFilterOptions): Promise<PaginatedResult<Neo4jProject>>;
    /**
     * Add a dependency relationship between projects
     * @param sourceProjectId ID of the dependent project (source)
     * @param targetProjectId ID of the dependency project (target)
     * @param type Type of dependency relationship - TODO: Use enum/constant
     * @param description Description of the dependency
     * @returns The IDs of the two projects and the relationship type
     */
    static addProjectDependency(sourceProjectId: string, targetProjectId: string, type: ProjectDependencyType, // Use the enum
    description: string): Promise<{
        id: string;
        sourceProjectId: string;
        targetProjectId: string;
        type: string;
        description: string;
    }>;
    /**
     * Remove a dependency relationship between projects
     * @param dependencyId The ID of the dependency relationship to remove
     * @returns True if removed, false if not found
     */
    static removeProjectDependency(dependencyId: string): Promise<boolean>;
    /**
     * Get all dependencies for a project (both dependencies and dependents)
     * @param projectId Project ID
     * @returns Object containing dependencies and dependents
     */
    static getProjectDependencies(projectId: string): Promise<{
        dependencies: {
            id: string;
            sourceProjectId: string;
            targetProjectId: string;
            type: string;
            description: string;
            targetProject: {
                id: string;
                name: string;
                status: string;
            };
        }[];
        dependents: {
            id: string;
            sourceProjectId: string;
            targetProjectId: string;
            type: string;
            description: string;
            sourceProject: {
                id: string;
                name: string;
                status: string;
            };
        }[];
    }>;
}
