/**
 * Ticket operations for PMO.
 * Tickets reference workflow statuses directly via status_id.
 * Board position is derived from priority and created_at (no separate board_tickets table).
 */
import { CreateTicketInput, Ticket, TicketFilter } from '../types.js';
import { StorageContext } from './types.js';
export declare class TicketStorage {
    private ctx;
    constructor(ctx: StorageContext);
    /**
     * Create a new ticket.
     * Gets default status from the project's workflow.
     */
    createTicket(projectId: string, ticket: CreateTicketInput): Promise<Ticket>;
    /**
     * Get a ticket by ID.
     */
    getTicket(id: string): Promise<Ticket | null>;
    /**
     * Get a ticket by ID (internal).
     * Looks up by ticket ID only - no project scoping required since ticket IDs are globally unique.
     * Joins workflow_statuses to get column name (status name is the column).
     */
    getTicketById(id: string): Promise<Ticket | null>;
    /**
     * Update a ticket.
     * Works with ticket ID only - no project context required since ticket IDs are globally unique.
     */
    updateTicket(id: string, changes: Partial<Ticket>): Promise<Ticket>;
    /**
     * Update the timestamp for a specific project.
     */
    private updateProjectTimestamp;
    /**
     * Move a ticket to a different status (column).
     * In the workflow-based system, columns ARE statuses.
     * The position parameter is ignored - tickets are sorted by priority then created_at.
     */
    moveTicket(projectId: string, id: string, column: string, _position?: number): Promise<Ticket>;
    /**
     * Delete a ticket.
     * Works with ticket ID only - no project context required since ticket IDs are globally unique.
     */
    deleteTicket(id: string): Promise<void>;
    /**
     * List tickets with optional filters.
     * @param projectId - The project to filter by. Pass undefined to list all tickets across all projects.
     * @param filter - Additional filters to apply.
     */
    listTickets(projectId: string | undefined, filter?: TicketFilter): Promise<Ticket[]>;
    /**
     * Move a ticket to a different project.
     * The ticket will get the default status from the target project's workflow.
     */
    moveTicketToProject(ticketId: string, newProjectId: string): Promise<Ticket>;
}
