import { IMAGE_ALIGNMENT } from './enum/image-alignment.enum';
import { ISeitonConfig } from './interfaces/seiton-config.interface';
export declare class Seiton {
    private config;
    private ticket;
    private lastOperation;
    /**
     * Inicializa una nueva instancia de la clase Seiton para control de impresoras termicas.
     *
     * @param config - Configuración para la conexion con la impresora
     * @throws {Error} Si la configuracion es invalida o incompleta
     *
     * @example
     * // Configuracion para conexión USB en Windows
     * const seiton = new Seiton({
     *   usb: {
     *     windows: {
     *       vendorId: SEITON_VID.V2,
     *       productId: SEITON_PID.V2
     *     }
     *   }
     * });
     *
     * @example
     * // Configuracion para conexion USB en Linux
     * const seiton = new Seiton({
     *   usb: {
     *     linux: {
     *       devicePath: '/dev/usb/lp0'
     *     }
     *   }
     * });
     *
     * @example
     * // Configuracion para conexion Ethernet
     * const seiton = new Seiton({
     *   ethernet: {
     *     ip: '192.168.1.100',
     *     port: 9100
     *   }
     * });
     *
     */
    constructor(config: ISeitonConfig);
    private validarConfiguracion;
    /**
     * Agrega un texto al ticket actual, agregando automaticamente el salto de linea al final.
     *
     * @param text - El texto a agregar al ticket.
     * @returns La instancia actual de Seiton para continuar armando el ticket
     */
    addText(text: string): Seiton;
    /**
     * Restablece los estilos predeterminados de la impresora a los valores por defecto.
     *
     * Cualquier texto/imagen/codigo de barras/codigo QR agregado despues de esta llamada se verá afectado por los estilos predeterminados.
     *
     * @returns La instancia actual de Seiton para continuar armando el ticket
     */
    setDefaultStyles(): Seiton;
    /**
     * Alinea todo el contenido a ser insertado **despues** de la llamada a esta funcion a la derecha.
     * @returns La instancia actual de Seiton para continuar armando el ticket
     */
    alignToRight(): Seiton;
    /**
     * Centra todo el contenido a ser insertado **despues** de la llamada a esta funcion.
     * @returns La instancia actual de Seiton para continuar armando el ticket
     */
    alignToCenter(): Seiton;
    /**
     * Avanza el papel una línea.
     * @returns La instancia actual de Seiton para continuar armando el ticket
     */
    feedLine(): Seiton;
    /**
     * Avanza el papel un número específico de líneas.
     * @param {number} lines Número de líneas a avanzar.
     * @returns La instancia actual de Seiton para continuar armando el ticket
     */
    feedLines(lines: number): Seiton;
    /**
     * Activa la cuchilla de la impresora para cortar el papel.
     * @returns La instancia actual de Seiton para continuar armando el ticket
     */
    cutPaper(): Seiton;
    /**
     * Avanza el papel una linea y luego lo corta.
     * @returns La instancia actual de Seiton para continuar armando el ticket
     */
    feedAndCutPaper(): Seiton;
    /**
     * Aplica el formato de texto doble alto y doble ancho.
     * @returns La instancia actual de Seiton para continuar armando el ticket
     */
    doubleTallDoubleWide(): Seiton;
    /**
     * Aplica el formato de texto doble alto.
     * @returns La instancia actual de Seiton para continuar armando el ticket
     */
    doubleTall(): Seiton;
    /**
     * Aplica el formato de texto doble ancho.
     * @returns La instancia actual de Seiton para continuar armando el ticket
     */
    doubleWide(): Seiton;
    /**
     * Aplica el formato de texto doble alto y negrita.
     * @returns La instancia actual de Seiton para continuar armando el ticket
     */
    doubleTallBold(): Seiton;
    /**
     * Activa el buzzer de la impresora y hace que emita un número especificado de pitidos
     * con una duración determinada para cada uno.
     *
     * @param {number} beepCount Número de pitidos a emitir (1-8).
     * @param {number} beepMillis Duración de cada pitido (1-10).
     * @returns La instancia actual de Seiton para continuar armando el ticket
     */
    posBeep(beepCount: number, beepMillis: number): Seiton;
    /**
     * Genera un código QR de tamaño y contenido configurable.
     *
     * @param {string} content - El contenido que se almacenará en el código QR.
     * @param {number} size - Tamaño del módulo del QR (valor entre 1 y 16).
     * @throws {Error} Si el tamaño está fuera del rango permitido (1-16).
     * @returns {Seiton} La instancia actual de Seiton para continuar armando el ticket
     *
     * @example
     * // Generar un código QR de tamaño 4 con el contenido "Hola Mundo"
     * addQRCode("Hola Mundo", 4);
     */
    addQRCode(content: string, size: number): Seiton;
    /**
     * Genera un código de barras CODE128.
     * Permite ajustar el tamaño del código de barras (ancho y altura), así como el ancho de las barras.
     * @param barcodeData - El contenido del código de barras en formato ASCII.
     * @param width - El ancho del código de barras (1 a 6).
     * @param height - La altura del código de barras (1 a 255).
     * @returns La instancia actual de Seiton para continuar armando el ticket.
     */
    addBarcode(barcodeData: string, width?: number, height?: number): Seiton;
    /**
     * Método para imprimir la página de autodiagnóstico de la impresora.
     * @returns La instancia actual de Seiton para continuar armando el ticket
     */
    printSelfTest(): Seiton;
    /**
     * Agrega una imagen al ticket. La imagen puede ser redimensionada según los parámetros especificados.
     * @param imagePath - Ruta al archivo de imagen
     * @param width - Ancho deseado de la imagen (opcional, por defecto usa el ancho de la impresora 384)
     * @param height - Alto deseado de la imagen (opcional, mantiene la proporción si no se especifica)
     * @param alignment - Alineación de la imagen (opcional, por defecto es CENTER = 2, LEFT = 0, RIGHT = 1)
     * @returns La instancia actual de Seiton para continuar armando el ticket
     */
    addImage(imagePath: string, width?: number, height?: number, alignment?: IMAGE_ALIGNMENT): Seiton;
    /**
     * Mapea los caracteres especiales a sus códigos de impresora
     * @param text Texto a mapear
     * @returns texto con caracteres especiales mapeados
     */
    private mapSpecialCharacters;
    /**
     * Abre el cajón de dinero conectado a la impresora
     * @returns La instancia actual de Seiton para continuar armando el ticket
     */
    openCashDrawer(): Seiton;
    /**
     * Aplica el formato de texto en negrita.
     * @returns La instancia actual de Seiton para continuar armando el ticket
     */
    enableBold(): Seiton;
    /**
     * Desactiva el formato de texto en negrita.
     * @returns La instancia actual de Seiton para continuar armando el ticket
     */
    disableBold(): Seiton;
    /**
     * Aplica el formato de texto subrayado.
     * @returns La instancia actual de Seiton para continuar armando el ticket
     */
    enableUnderline(): Seiton;
    /**
     * Desactiva el formato de texto subrayado.
     * @returns La instancia actual de Seiton para continuar armando el ticket
     */
    disableUnderline(): Seiton;
    private printImageBuffer;
    /**
     * Verifica si la impresora está conectada por USB o Red en base a la configuracion de la clase Seiton.
     * @returns {boolean} true si la impresora está conectada, false si no lo está.
     */
    isPrinterConnected(): Promise<boolean>;
    /**
     * Configura la impresora para obtener una dirección IP dinámica mediante DHCP.
     * @returns {Seiton} La instancia actual de Seiton para permitir el encadenamiento de métodos.
     */
    setDHCP(): Seiton;
    /**
     * Configura la impresora con una dirección IP estática.
     * Este método envía el comando necesario para establecer una IP fija, máscara de subred,
     * puerta de enlace y servidores DNS en la impresora.
     *
     * @param {string} ip - La dirección IP estática a asignar.
     * @param {string} mask - La máscara de subred asociada a la IP.
     * @param {string} gateway - La dirección de la puerta de enlace.
     * @param {string} dns1 - La dirección del primer servidor DNS.
     * @param {string} dns2 - La dirección del segundo servidor DNS.
     * @returns {Seiton} La instancia actual de Seiton para permitir el encadenamiento de métodos.
     * @throws {Error} Si alguna de las direcciones no tiene 4 octetos.
     */
    setStaticIP(ip: string, mask: string, gateway: string, dns1: string, dns2: string): Seiton;
    private parseAndValidateIP;
    private calculateChecksum;
    /**
     * Imprime el ticket en el puerto USB especificado en el constructor de la clase.
     * @throws Lanzará un error si el ticket no se puede imprimir.
     */
    print(): Promise<void>;
    private chain;
    private inicializarBuffer;
    private enviarComandosAImpresora;
    private isHostConnected;
}
