/**
 * Channel CRUD Operations
 * 채널 생성, 조회, 수정, 삭제 통합 관리
 */
import { type Channel, type ChannelCreateRequest, type ChannelFilters, type SenderNumber, type SenderNumberCreateRequest, type SenderNumberFilters } from "../../types/channel.types";
import { EventEmitter } from "../shared/event-emitter";
export interface PaginationOptions {
    page: number;
    limit: number;
    sortBy?: string;
    sortOrder?: "asc" | "desc";
}
export interface PaginatedResult<T> {
    data: T[];
    total: number;
    page: number;
    limit: number;
    totalPages: number;
    hasNext: boolean;
    hasPrev: boolean;
}
export interface ChannelCRUDOptions {
    enableAuditLog: boolean;
    enableEventEmission: boolean;
    defaultPageSize: number;
    maxPageSize: number;
    enableSoftDelete: boolean;
    autoCleanup: boolean;
    cleanupInterval: number;
}
export interface AuditLogEntry {
    id: string;
    entityType: "channel" | "senderNumber";
    entityId: string;
    action: "create" | "read" | "update" | "delete" | "verify" | "suspend" | "activate";
    userId?: string;
    timestamp: Date;
    changes?: {
        before: any;
        after: any;
    };
    metadata?: Record<string, any>;
}
export declare class ChannelCRUD extends EventEmitter {
    private options;
    private channels;
    private senderNumbers;
    private auditLogs;
    private cleanupTimer?;
    private defaultOptions;
    constructor(options?: Partial<ChannelCRUDOptions>);
    createChannel(request: ChannelCreateRequest, userId?: string): Promise<Channel>;
    getChannel(channelId: string, userId?: string): Promise<Channel | null>;
    updateChannel(channelId: string, updates: Partial<Omit<Channel, "id" | "createdAt" | "updatedAt">>, userId?: string): Promise<Channel>;
    deleteChannel(channelId: string, userId?: string): Promise<boolean>;
    listChannels(filters?: ChannelFilters, pagination?: PaginationOptions): Promise<PaginatedResult<Channel>>;
    createSenderNumber(channelId: string, request: SenderNumberCreateRequest, userId?: string): Promise<SenderNumber>;
    getSenderNumber(senderNumberId: string, userId?: string): Promise<SenderNumber | null>;
    updateSenderNumber(senderNumberId: string, updates: Partial<Omit<SenderNumber, "id" | "phoneNumber" | "createdAt" | "updatedAt">>, userId?: string): Promise<SenderNumber>;
    deleteSenderNumber(senderNumberId: string, userId?: string): Promise<boolean>;
    listSenderNumbers(filters?: SenderNumberFilters, pagination?: PaginationOptions): Promise<PaginatedResult<SenderNumber>>;
    getAuditLogs(entityType?: "channel" | "senderNumber", entityId?: string, limit?: number): AuditLogEntry[];
    getStatistics(): {
        channels: {
            total: number;
            byStatus: Record<string, number>;
            byType: Record<string, number>;
            byProvider: Record<string, number>;
        };
        senderNumbers: {
            total: number;
            byStatus: Record<string, number>;
            byCategory: Record<string, number>;
        };
    };
    cleanup(): {
        deletedChannels: number;
        expiredAuditLogs: number;
    };
    destroy(): void;
    private addAuditLog;
    private removeSenderNumbersForChannel;
    private getDefaultLimits;
    private getDefaultFeatures;
    private startAutoCleanup;
    private generateChannelId;
    private generateSenderNumberId;
    private generateAuditLogId;
}
