import type { HttpClient } from "../client/HttpClient";
import type { Result } from "../types/Result";
import { MNotifyError } from "../errors/MNotifyError";
/**
 * Response type for SMS send operations
 */
export interface SendSMSResponse {
    status: string;
    code: string;
    message: string;
    summary: {
        _id: string;
        message_id: string;
        type: string;
        total_sent: number;
        contacts: number;
        total_rejected: number;
        numbers_sent: string[];
        credit_used: number;
        credit_left: number;
    };
}
/**
 * Delivery report type for SMS status checks
 */
export interface SmsDeliveryReport {
    status: string;
    report: Array<{
        _id: number;
        recipient: string;
        message: string;
        sender: string;
        status: string;
        date_sent: string;
        campaign_id?: string;
        retries: number;
    }>;
}
/**
 * Options for sending SMS messages
 * @property {string|string[]} recipient - Single number or array of numbers
 * @property {string} sender - Registered sender ID
 * @property {string} message - Content to send (160 chars max)
 * @property {boolean} [is_schedule=false] - Flag for scheduled messages
 * @property {string} [schedule_date] - ISO date for scheduled sends
 */
export interface SendSMSOptions {
    recipient: string | string[];
    sender: string;
    message: string;
    is_schedule?: boolean;
    schedule_date?: string;
}
/**
 * Service for managing SMS operations with mNotify BMS API
 */
export declare class SMSService {
    private readonly client;
    /**
     * Creates an instance of SMSService
     * @param {HttpClient} client - Configured API client instance
     */
    constructor(client: HttpClient);
    private annotate;
    /**
     * Sends bulk SMS messages to one or more recipients (railway-oriented programming)
     * @param {SendSMSOptions} options - SMS configuration
     * @returns {Promise<Result<SendSMSResponse, MNotifyError>>} Result containing send report or error
     *
     * @example
     * ```typescript
     * const result = await smsService.sendQuickBulkSMSSafe({
     *   recipient: ['233200000000', '233244444444'],
     *   sender: 'MyApp',
     *   message: 'Hello from mNotify!'
     * });
     *
     * if (result.isOk()) {
     *   console.log('SMS sent:', result.value);
     * } else {
     *   console.error('Failed to send SMS:', result.error);
     * }
     * ```
     */
    sendQuickBulkSMSSafe(options: SendSMSOptions): Promise<Result<SendSMSResponse, MNotifyError>>;
    /**
     * Sends bulk SMS messages to one or more recipients (throws on error - legacy API)
     * @param {SendSMSOptions} options - SMS configuration
     * @returns {Promise<SendSMSResponse>} Detailed send report
     * @throws {MNotifyError} On API failure or validation errors
     *
     * @example
     * ```typescript
     * await smsService.sendQuickBulkSMS({
     *   recipient: ['233200000000', '233244444444'],
     *   sender: 'MyApp',
     *   message: 'Hello from mNotify!'
     * });
     * ```
     */
    sendQuickBulkSMS(options: SendSMSOptions): Promise<SendSMSResponse>;
    /**
     * Retrieves delivery status for a sent SMS campaign (railway-oriented programming)
     * @param {string} campaignId - ID from send response
     * @param {string} [status='null'] - Optional status filter
     * @returns {Promise<Result<SmsDeliveryReport, MNotifyError>>} Result containing delivery report or error
     *
     * @example
     * ```typescript
     * const result = await smsService.getSMSStatusSafe('campaign_123');
     * result.match({
     *   ok: (report) => console.log('Status:', report.status),
     *   err: (error) => console.error('Error:', error.message)
     * });
     * ```
     */
    getSMSStatusSafe(campaignId: string, status?: string): Promise<Result<SmsDeliveryReport, MNotifyError>>;
    /**
     * Retrieves delivery status for a sent SMS campaign (throws on error - legacy API)
     * @param {string} campaignId - ID from send response
     * @param {string} [status='null'] - Optional status filter
     * @returns {Promise<SmsDeliveryReport>} Detailed delivery report
     * @throws {MNotifyError} On API failure or invalid campaign ID
     *
     * @example
     * ```typescript
     * const report = await smsService.getSMSStatus('campaign_123');
     * console.log(report.status); // 'delivered', 'failed', etc.
     * ```
     */
    getSMSStatus(campaignId: string, status?: string): Promise<SmsDeliveryReport>;
}
