/**
 * Types for Zalo Official Account Article Management
 * Based on Zalo Article API v2.0
 */
import { ZaloApiResponse } from "./common";
/**
 * Article cover configuration
 */
export interface ArticleCover {
    /** Cover type: photo or video */
    cover_type: 'photo' | 'video';
    /** Photo URL (required when cover_type is 'photo') */
    photo_url?: string;
    /** Video ID (required when cover_type is 'video') */
    video_id?: string;
    /** Cover view orientation for video */
    cover_view?: 'horizontal' | 'vertical' | 'square';
    /** Cover status */
    status: 'show' | 'hide';
}
/**
 * Article body content item
 */
export interface ArticleBodyItem {
    /** Content type */
    type: 'text' | 'image' | 'video' | 'product';
    /** Text content (for type: text) */
    content?: string;
    /** Image URL (for type: image) */
    url?: string;
    /** Video ID (for type: video) */
    video_id?: string;
    /** Product ID (for type: product) */
    id?: string;
    /** Additional properties for video */
    width?: number;
    height?: number;
    thumbnail?: string;
}
/**
 * Normal article creation request
 */
export interface ArticleNormalRequest {
    type: 'normal';
    title: string;
    author: string;
    cover: ArticleCover;
    description: string;
    body: ArticleBodyItem[];
    related_medias?: string[];
    tracking_link?: string;
    status?: 'show' | 'hide';
    comment?: 'show' | 'hide';
}
/**
 * Video article creation request
 */
export interface ArticleVideoRequest {
    type: 'video';
    title: string;
    description: string;
    video_id: string;
    avatar: string;
    status?: 'show' | 'hide';
    comment?: 'show' | 'hide';
}
/**
 * Article creation request (union type)
 */
export type ArticleRequest = ArticleNormalRequest | ArticleVideoRequest;
/**
 * Article creation response
 */
export interface ArticleResponse {
    /** Token for tracking article creation progress */
    token: string;
}
/**
 * Article process check response
 */
export interface ArticleProcessResponse {
    /** Article ID if creation is successful */
    article_id?: string;
    /** Process status */
    status: 'processing' | 'success' | 'failed';
    /** Error message if failed */
    error_message?: string;
    /** Creation timestamp */
    created_time: number;
    /** Last update timestamp */
    updated_time: number;
}
/**
 * Article verification response
 */
export interface ArticleVerifyResponse {
    /** Article ID */
    id: string;
}
/**
 * Article cite information
 */
export interface ArticleCite {
    url: string;
    description: string;
}
/**
 * Article detail (normal type)
 */
export interface ArticleDetailNormal {
    id: string;
    type: 'normal';
    title: string;
    author: string;
    cover: ArticleCover;
    description: string;
    body: ArticleBodyItem[];
    related_medias: string[];
    tracking_link: string;
    status: 'show' | 'hide';
    comment: 'show' | 'hide';
    cite?: ArticleCite;
    link_view: string;
    total_view: number;
    total_share: number;
    total_like: number;
    total_comment: number;
}
/**
 * Article detail (video type)
 */
export interface ArticleDetailVideo {
    id: string;
    type: 'video';
    title: string;
    description: string;
    video_id: string;
    avatar: string;
    status: 'show' | 'hide';
    comment: 'show' | 'hide';
    link_view: string;
    total_view: number;
    total_share: number;
    total_like: number;
    total_comment: number;
}
/**
 * Article detail (union type)
 */
export type ArticleDetail = ArticleDetailNormal | ArticleDetailVideo;
/**
 * Article list request
 */
export interface ArticleListRequest {
    /** Starting position */
    offset: number;
    /** Number of articles to return (max 100) */
    limit: number;
    /** Article type filter */
    type: 'normal' | 'video';
}
/**
 * Article list item - matches Zalo API response structure exactly
 */
export interface ArticleListItem {
    /** Article ID */
    id: string;
    /** Article type */
    type: 'normal' | 'video';
    /** Article title */
    title: string;
    /** Article status */
    status: 'show' | 'hide';
    /** Total view count */
    total_view: number;
    /** Total share count */
    total_share: number;
    /** Article creation date (timestamp) */
    create_date: number;
    /** Article update date (timestamp) */
    update_date: number;
    /** Article thumbnail URL */
    thumb: string;
    /** Article view link */
    link_view: string;
}
/**
 * Article list response data - matches Zalo API response structure exactly
 */
export interface ArticleListData {
    /** Array of articles (called "medias" in Zalo API) */
    medias: ArticleListItem[];
    /** Total number of articles */
    total: number;
}
/**
 * Article list response
 */
export type ArticleListResponse = ZaloApiResponse<ArticleListData>;
/**
 * Normal article update request
 */
export interface ArticleUpdateNormalRequest {
    id: string;
    type: 'normal';
    title: string;
    author: string;
    cover: ArticleCover;
    description: string;
    body: ArticleBodyItem[];
    related_medias?: string[];
    tracking_link?: string;
    status?: 'show' | 'hide';
    comment?: 'show' | 'hide';
}
/**
 * Video article update request
 */
export interface ArticleUpdateVideoRequest {
    id: string;
    type: 'video';
    title: string;
    description: string;
    video_id: string;
    avatar: string;
    status?: 'show' | 'hide';
    comment?: 'show' | 'hide';
}
/**
 * Article update request (union type)
 */
export type ArticleUpdateRequest = ArticleUpdateNormalRequest | ArticleUpdateVideoRequest;
/**
 * Article update response
 */
export interface ArticleUpdateResponse {
    /** Token for tracking article update progress */
    token: string;
}
/**
 * Article removal request
 */
export interface ArticleRemoveRequest {
    /** Article ID to remove */
    id: string;
}
/**
 * Article removal response
 */
export interface ArticleRemoveResponse {
    /** Success message */
    message: string;
}
/**
 * Video upload response
 */
export interface VideoUploadResponse {
    /** Token for tracking video upload progress */
    token: string;
}
/**
 * Video status response
 */
export interface VideoStatusResponse {
    /** Video ID (available when processing is complete) */
    video_id?: string;
    /** Video name */
    video_name?: string;
    /** Video size in bytes */
    video_size?: number;
    /** Processing status */
    status: number;
    /** Status message */
    status_message: string;
    /** Conversion progress percentage */
    convert_percent: number;
    /** Conversion error code */
    convert_error_code: number;
}
/**
 * Article validation error
 */
export interface ArticleValidationError {
    field: string;
    message: string;
    code: string;
}
/**
 * Video file validation constraints
 */
export interface VideoFileConstraints {
    /** Maximum file size in bytes (50MB) */
    maxSize: number;
    /** Allowed file extensions */
    allowedExtensions: string[];
    /** Allowed MIME types */
    allowedMimeTypes: string[];
}
/**
 * Article validation constants
 */
export declare const ARTICLE_CONSTRAINTS: {
    readonly TITLE_MAX_LENGTH: 150;
    readonly AUTHOR_MAX_LENGTH: 50;
    readonly DESCRIPTION_MAX_LENGTH: 300;
    readonly IMAGE_MAX_SIZE: number;
    readonly VIDEO_MAX_SIZE: number;
    readonly LIST_MAX_LIMIT: 100;
};
/**
 * Video upload constraints
 */
export declare const VIDEO_CONSTRAINTS: VideoFileConstraints;
/**
 * Article status enum
 */
export declare enum ArticleStatus {
    SHOW = "show",
    HIDE = "hide"
}
/**
 * Comment status enum
 */
export declare enum CommentStatus {
    SHOW = "show",
    HIDE = "hide"
}
/**
 * Article type enum
 */
export declare enum ArticleType {
    NORMAL = "normal",
    VIDEO = "video"
}
/**
 * Cover type enum
 */
export declare enum CoverType {
    PHOTO = "photo",
    VIDEO = "video"
}
/**
 * Body item type enum
 */
export declare enum BodyItemType {
    TEXT = "text",
    IMAGE = "image",
    VIDEO = "video",
    PRODUCT = "product"
}
/**
 * Video upload status enum
 */
export declare enum VideoUploadStatus {
    UNKNOWN = 0,// Trạng thái không xác định
    SUCCESS = 1,// Video đã được xử lý thành công và có thể sử dụng
    LOCKED = 2,// Video đã bị khóa
    PROCESSING = 3,// Video đang được xử lý
    FAILED = 4,// Video xử lý thất bại
    DELETED = 5
}
//# sourceMappingURL=article.d.ts.map