import { ZaloClient } from "../clients/zalo-client";
import { ArticleRequest, ArticleNormalRequest, ArticleVideoRequest, ArticleResponse, ArticleProcessResponse, ArticleVerifyResponse, ArticleDetail, ArticleListRequest, ArticleListResponse, ArticleRemoveResponse, ArticleUpdateRequest, ArticleUpdateNormalRequest, ArticleUpdateVideoRequest, ArticleUpdateResponse, ArticleStatus, CommentStatus } from "../types/article";
/**
 * Service for handling Zalo Official Account Article Management APIs
 *
 * CONDITIONS FOR USING ZALO ARTICLE MANAGEMENT:
 *
 * 1. GENERAL CONDITIONS:
 *    - OA must have permission to create articles
 *    - Access token must have "manage_article" scope
 *    - OA must have active status and be verified
 *
 * 2. ARTICLE CREATION:
 *    - Title: required, max 150 characters
 *    - Author: required for normal articles, max 50 characters
 *    - Description: required, max 300 characters
 *    - Image size: max 1MB per image
 *    - Status: 'show' (publish immediately) or 'hide' (draft)
 *    - Comment: 'show' (allow comments) or 'hide' (disable comments)
 *
 * 3. CONTENT VALIDATION:
 *    - Normal articles: must have cover, body content, and author
 *    - Video articles: must have video_id and avatar
 *    - Body items: support text, image, video, and product types
 *    - Tracking links: must be valid URLs
 *
 * 4. LIMITS AND CONSTRAINTS:
 *    - Article list: max 100 items per request
 *    - Processing time: use token to check progress
 *    - Update frequency: reasonable intervals recommended
 */
export declare class ArticleService {
    private readonly client;
    private readonly endpoints;
    constructor(client: ZaloClient);
    /**
     * Create normal article with rich content
     * @param accessToken OA access token
     * @param request Normal article information
     * @returns Token for tracking creation progress
     */
    createNormalArticle(accessToken: string, request: ArticleNormalRequest): Promise<ArticleResponse>;
    /**
     * Create video article
     * @param accessToken OA access token
     * @param request Video article information
     * @returns Token for tracking creation progress
     */
    createVideoArticle(accessToken: string, request: ArticleVideoRequest): Promise<ArticleResponse>;
    /**
     * Create article (automatically detect type)
     * @param accessToken OA access token
     * @param request Article information
     * @returns Token for tracking creation progress
     */
    createArticle(accessToken: string, request: ArticleRequest): Promise<ArticleResponse>;
    /**
     * Check article creation progress
     * @param accessToken OA access token
     * @param token Token from article creation response
     * @returns Progress information
     */
    checkArticleProcess(accessToken: string, token: string): Promise<ArticleProcessResponse>;
    /**
     * Verify article and get article ID
     * @param accessToken OA access token
     * @param token Token from article creation or update response
     * @returns Article ID
     */
    verifyArticle(accessToken: string, token: string): Promise<ArticleVerifyResponse>;
    /**
     * Get article details
     * @param accessToken OA access token
     * @param articleId Article ID
     * @returns Article details
     */
    getArticleDetail(accessToken: string, articleId: string): Promise<ArticleDetail>;
    /**
     * Get article list
     * @param accessToken OA access token
     * @param request List parameters
     * @returns Article list
     */
    getArticleList(accessToken: string, request: ArticleListRequest): Promise<ArticleListResponse>;
    /**
     * Remove article
     * @param accessToken OA access token
     * @param articleId Article ID to remove
     * @returns Removal result
     */
    removeArticle(accessToken: string, articleId: string): Promise<ArticleRemoveResponse>;
    private handleArticleError;
    /**
     * Update normal article
     * @param accessToken OA access token
     * @param request Update information
     * @returns Token for tracking update progress
     */
    updateNormalArticle(accessToken: string, request: ArticleUpdateNormalRequest): Promise<ArticleUpdateResponse>;
    /**
     * Update video article
     * @param accessToken OA access token
     * @param request Update information
     * @returns Token for tracking update progress
     */
    updateVideoArticle(accessToken: string, request: ArticleUpdateVideoRequest): Promise<ArticleUpdateResponse>;
    /**
     * Update article (automatically detect type)
     * @param accessToken OA access token
     * @param request Update information
     * @returns Token for tracking update progress
     */
    updateArticle(accessToken: string, request: ArticleUpdateRequest): Promise<ArticleUpdateResponse>;
    /**
     * Update article status only
     * @param accessToken OA access token
     * @param articleId Article ID to update
     * @param status New status ('show' or 'hide')
     * @param comment Optional comment status ('show' or 'hide')
     * @returns Token for tracking update progress
     */
    updateArticleStatus(accessToken: string, articleId: string, status: ArticleStatus, comment?: CommentStatus): Promise<ArticleUpdateResponse>;
    /**
     * Validate normal article creation request
     */
    private validateNormalArticleRequest;
    /**
     * Validate video article creation request
     */
    private validateVideoArticleRequest;
    /**
     * Validate article list request
     */
    private validateArticleListRequest;
    /**
     * Validate normal article update request
     */
    private validateUpdateNormalArticleRequest;
    /**
     * Validate video article update request
     */
    private validateUpdateVideoArticleRequest;
    /**
     * Validate cover information
     */
    private validateCover;
    /**
     * Validate body item
     */
    private validateBodyItem;
    private isValidTrackingLink;
}
//# sourceMappingURL=article.service.d.ts.map