import { IIssueDocument } from "../models/Issue.model";
import { CreateIssueData, UpdateIssueData, IssueStatus, IssuePriority, IssuesCategory, EntityType } from "../../../types/issue.types";
export declare class IssueRepository {
    /**
     * Create a new issue
     */
    create(issueData: CreateIssueData): Promise<IIssueDocument>;
    /**
     * Find issue by ID
     */
    findById(id: string, includeDeleted?: boolean): Promise<IIssueDocument | null>;
    /**
     * Find all issues with filters
     */
    findAll(filters?: {
        propertyId?: string;
        assignedTo?: string;
        status?: IssueStatus;
        priority?: IssuePriority;
        category?: IssuesCategory;
        entityType?: EntityType;
        entityId?: string;
        includeDeleted?: boolean;
        limit?: number;
        skip?: number;
        sort?: {
            [key: string]: 1 | -1;
        };
    }): Promise<IIssueDocument[]>;
    /**
     * Update an issue
     */
    update(id: string, updateData: UpdateIssueData): Promise<IIssueDocument | null>;
    /**
     * Soft delete an issue
     */
    softDelete(id: string, deletedBy: string): Promise<boolean>;
    /**
     * Permanently delete an issue
     */
    hardDelete(id: string): Promise<boolean>;
    /**
     * Count issues with filters
     */
    count(filters?: {
        propertyId?: string;
        assignedTo?: string;
        status?: IssueStatus;
        priority?: IssuePriority;
        category?: IssuesCategory;
        entityType?: EntityType;
        entityId?: string;
        includeDeleted?: boolean;
    }): Promise<number>;
    /**
     * Find issues by property
     */
    findByProperty(propertyId: string, includeDeleted?: boolean): Promise<IIssueDocument[]>;
    /**
     * Find issues by assignee
     */
    findByAssignee(assignedTo: string, includeDeleted?: boolean): Promise<IIssueDocument[]>;
    /**
     * Find issues by entity
     */
    findByEntity(entityId: string, entityType: EntityType, includeDeleted?: boolean): Promise<IIssueDocument[]>;
    /**
     * Find issues by status
     */
    findByStatus(status: IssueStatus, includeDeleted?: boolean): Promise<IIssueDocument[]>;
    /**
     * Find issues by priority
     */
    findByPriority(priority: IssuePriority, includeDeleted?: boolean): Promise<IIssueDocument[]>;
    /**
     * Find overdue issues
     */
    findOverdue(includeDeleted?: boolean): Promise<IIssueDocument[]>;
    /**
     * Find upcoming issues
     */
    findUpcoming(days?: number, includeDeleted?: boolean): Promise<IIssueDocument[]>;
    /**
     * Search issues by text
     */
    search(searchTerm: string, filters?: {
        propertyId?: string;
        includeDeleted?: boolean;
        limit?: number;
        skip?: number;
    }): Promise<IIssueDocument[]>;
    /**
     * Get issue statistics
     */
    getStatistics(propertyId?: string): Promise<{
        total: number;
        pending: number;
        inProgress: number;
        resolved: number;
        closed: number;
        overdue: number;
        byPriority: Record<IssuePriority, number>;
        byCategory: Record<IssuesCategory, number>;
    }>;
    /**
     * Bulk update issues
     */
    bulkUpdate(ids: string[], updateData: Partial<UpdateIssueData>): Promise<number>;
    /**
     * Bulk soft delete issues
     */
    bulkSoftDelete(ids: string[], deletedBy: string): Promise<number>;
}
