/**
 * Project operations.
 * Board columns are now derived from workflow statuses (single source of truth).
 *
 * This module uses Drizzle ORM for type-safe database queries.
 */
import { Board, BoardConfig, Project, ProjectFilter } from '../types.js';
import { StorageContext } from './types.js';
export declare class ProjectStorage {
    private ctx;
    constructor(ctx: StorageContext);
    /**
     * Resolve a project identifier to its actual ID.
     * Tries multiple strategies:
     * 1. Exact ID match
     * 2. Case-insensitive ID match
     * 3. Exact name match
     * 4. Case-insensitive name match
     * 5. Slugified name match (matches slug of project name)
     *
     * @param identifier - Project ID, name, or slug to resolve
     * @returns The actual project ID, or null if not found
     */
    resolveProjectId(identifier: string): string | null;
    /**
     * Initialize a project with a workflow.
     * @deprecated Use createProject with a template instead.
     */
    init(projectId: string, config: BoardConfig): Promise<Board>;
    /**
     * Get the project board.
     * Columns are derived from the project's workflow statuses.
     * Tickets are sorted by priority (P0 first) then created_at (oldest first).
     *
     * @param projectIdOrName - Project ID, name, or slug. Will be resolved to actual ID.
     */
    getBoard(projectIdOrName: string): Promise<Board>;
    /**
     * Get the board as markdown.
     */
    getBoardMarkdown(projectId: string): Promise<string>;
    /**
     * Create a new project.
     * Assigns a workflow based on the workflow ID (defaults to 'default' workflow).
     */
    createProject(project: {
        id?: string;
        name: string;
        template?: string;
        description?: string;
    }): Promise<Board>;
    /**
     * Get project board by ID, name, or slug.
     */
    getProjectBoard(projectIdOrName: string): Promise<Board | null>;
    /**
     * Get tickets for a status (column).
     * Tickets are sorted by position (force-ranked) then created_at as tiebreaker.
     */
    private getTicketsForStatus;
    /**
     * List project summaries.
     */
    listProjectSummaries(): Promise<Array<{
        id: string;
        name: string;
        template: string | null;
        description: string | null;
        ticketCount: number;
    }>>;
    /**
     * Delete a project by ID, name, or slug.
     */
    deleteProject(projectIdOrName: string): Promise<void>;
    /**
     * Get a project by ID, name, or slug.
     */
    getProject(idOrName: string): Promise<Project | null>;
    /**
     * Update a project by ID, name, or slug.
     */
    updateProject(idOrName: string, changes: Partial<Project>): Promise<Project>;
    /**
     * List projects with optional filter.
     */
    listProjects(filter?: ProjectFilter): Promise<Project[]>;
    /**
     * Archive a project by ID, name, or slug.
     */
    archiveProject(idOrName: string): Promise<Project>;
    /**
     * Unarchive a project by ID, name, or slug.
     */
    unarchiveProject(idOrName: string): Promise<Project>;
    private rowToProject;
}
