import { ZaloClient } from "../clients/zalo-client";
/**
 * Interface cho thông tin quota tin nhắn
 */
export interface MessageQuotaInfo {
    quota: number;
    used: number;
    remaining: number;
    reset_time: number;
}
/**
 * Interface cho tin nhắn trong cuộc hội thoại
 */
export interface ConversationMessage {
    message_id: string;
    from_id: string;
    to_id: string;
    message: {
        text?: string;
        attachment?: {
            type: string;
            payload: any;
        };
    };
    timestamp: number;
    type: "incoming" | "outgoing";
}
/**
 * Interface cho cuộc hội thoại
 */
export interface Conversation {
    conversation_id: string;
    user_id: string;
    last_message: ConversationMessage;
    unread_count: number;
    updated_time: number;
}
/**
 * Interface cho kết quả upload file - matches Zalo API docs exactly
 */
export interface UploadFileResult {
    /** Token của file, sử dụng cho API gửi thông báo đính kèm file */
    token: string;
}
/**
 * Interface cho kết quả upload image - matches Zalo API docs exactly
 */
export interface UploadImageResult {
    /** ID của ảnh được upload */
    attachment_id: string;
}
/**
 * Interface cho thông tin phân trang tin nhắn
 */
export interface MessagePagination {
    offset: number;
    count: number;
    total: number;
}
/**
 * Service xử lý các API quản lý tin nhắn của Zalo Official Account
 *
 * Bao gồm các chức năng:
 * - Kiểm tra hạn mức gửi tin nhắn
 * - Lấy danh sách tin nhắn trong cuộc hội thoại
 * - Lấy danh sách cuộc hội thoại
 * - Upload file và hình ảnh
 * - Quản lý trạng thái tin nhắn
 *
 * ĐIỀU KIỆN SỬ DỤNG:
 *
 * 1. KIỂM TRA HẠN MỨC:
 *    - Cần quyền truy cập thông tin quota từ Zalo
 *    - Quota được reset hàng ngày vào 00:00 GMT+7
 *
 * 2. LẤY TIN NHẮN:
 *    - Chỉ có thể lấy tin nhắn trong vòng 7 ngày gần nhất
 *    - Tối đa 50 tin nhắn mỗi lần gọi API
 *
 * 3. UPLOAD FILE:
 *    - Kích thước tối đa 5MB
 *    - Hỗ trợ các định dạng: PDF, DOC, DOCX
 *    - Quota: 5000 request/tháng
 *
 * 4. UPLOAD HÌNH ẢNH:
 *    - Dung lượng tối đa 1MB
 *    - Hỗ trợ các định dạng: JPG và PNG
 *    - Ảnh sẽ được lưu trên server tối đa 7 ngày
 *    - Quota: 5000 request/tháng
 *
 * 5. UPLOAD ẢNH GIF:
 *    - Kích thước tối đa 5MB
 *    - Chỉ hỗ trợ định dạng GIF
 *    - Ảnh GIF được lưu trên server tối đa 7 ngày
 *    - Quota: 5000 request/tháng
 */
export declare class MessageManagementService {
    private readonly client;
    private readonly endpoints;
    constructor(client: ZaloClient);
    /**
     * Kiểm tra hạn mức gửi tin nhắn đến user cụ thể
     * @param accessToken Access token của Official Account
     * @param userId ID của người dùng Zalo
     * @returns Thông tin hạn mức gửi tin nhắn
     */
    checkMessageQuota(accessToken: string, userId: string): Promise<MessageQuotaInfo>;
    /**
     * Lấy danh sách tin nhắn trong cuộc hội thoại với user
     * @param accessToken Access token của Official Account
     * @param userId ID của người dùng Zalo
     * @param offset Vị trí bắt đầu lấy tin nhắn (mặc định: 0)
     * @param count Số lượng tin nhắn cần lấy (mặc định: 20, tối đa: 50)
     * @returns Danh sách tin nhắn và thông tin phân trang
     */
    getConversationMessages(accessToken: string, userId: string, offset?: number, count?: number): Promise<{
        messages: ConversationMessage[];
        pagination: MessagePagination;
    }>;
    /**
     * Lấy danh sách cuộc hội thoại gần đây
     * @param accessToken Access token của Official Account
     * @param offset Vị trí bắt đầu lấy cuộc hội thoại (mặc định: 0)
     * @param count Số lượng cuộc hội thoại cần lấy (mặc định: 20, tối đa: 50)
     * @returns Danh sách cuộc hội thoại và thông tin phân trang
     */
    getRecentConversations(accessToken: string, offset?: number, count?: number): Promise<{
        conversations: Conversation[];
        pagination: MessagePagination;
    }>;
    /**
     * Upload file để sử dụng trong tin nhắn
     * @param accessToken Access token của Official Account
     * @param fileData Dữ liệu file (base64 hoặc buffer)
     * @param fileName Tên file
     * @returns Token của file đã upload
     *
     * Lưu ý:
     * - Chỉ hỗ trợ file PDF/DOC/DOCX
     * - Dung lượng file không vượt quá 5MB
     * - File sẽ được lưu trên server tối đa 7 ngày
     * - Quota: 5000 request/tháng
     */
    uploadFile(accessToken: string, fileData: string | Buffer, fileName: string): Promise<UploadFileResult>;
    /**
     * Upload hình ảnh để sử dụng trong tin nhắn
     * @param accessToken Access token của Official Account
     * @param imageData Dữ liệu hình ảnh (base64 hoặc buffer)
     * @param fileName Tên file hình ảnh
     * @returns ID của ảnh đã upload
     *
     * Lưu ý:
     * - Hỗ trợ các định dạng: JPG và PNG
     * - Dung lượng tối đa: 1MB
     * - Ảnh sẽ được lưu trên server tối đa 7 ngày
     * - Quota: 5000 request/tháng
     */
    uploadImage(accessToken: string, imageData: string | Buffer, fileName: string): Promise<UploadImageResult>;
    /**
     * Upload ảnh GIF để sử dụng trong tin nhắn
     * @param accessToken Access token của Official Account
     * @param gifData Dữ liệu ảnh GIF (base64 hoặc buffer)
     * @param fileName Tên file ảnh GIF
     * @returns Thông tin ảnh GIF đã upload
     *
     * Lưu ý:
     * - Dung lượng tối đa: 5MB
     * - Ảnh GIF sẽ được lưu trên server tối đa 7 ngày
     * - Quota: 5000 request/tháng
     * - Định dạng hỗ trợ: GIF
     */
    uploadGif(accessToken: string, gifData: string | Buffer, fileName: string): Promise<UploadImageResult>;
}
//# sourceMappingURL=message-management.service.d.ts.map