/**
 * Servicio de impresión simplificado
 * Usa el diálogo de impresión nativo del navegador (window.print)
 */
class PrintService {
    /**
     * Imprimir PDF usando window.print()
     * Abre el PDF en una nueva ventana e invoca el diálogo de impresión del navegador
     * @param {string} pdfDataUri - PDF como data URI o base64
     * @returns {Promise}
     */
    async printPDF(pdfDataUri) {
        return new Promise((resolve, reject) => {
            try {
                // Asegurar que tenemos el data URI completo
                let dataUri = pdfDataUri;
                if (!dataUri.startsWith('data:')) {
                    dataUri = `data:application/pdf;base64,${pdfDataUri}`;
                }

                // Convertir data URI a Blob
                const byteString = atob(dataUri.split(',')[1]);
                const mimeString = dataUri.split(',')[0].split(':')[1].split(';')[0];
                const ab = new ArrayBuffer(byteString.length);
                const ia = new Uint8Array(ab);

                for (let i = 0; i < byteString.length; i++) {
                    ia[i] = byteString.charCodeAt(i);
                }

                const blob = new Blob([ab], { type: mimeString });
                const blobUrl = URL.createObjectURL(blob);

                // Abrir ventana nueva con el PDF
                const printWindow = window.open(blobUrl, '_blank', 'width=800,height=600');

                if (!printWindow) {
                    URL.revokeObjectURL(blobUrl);
                    reject(new Error('No se pudo abrir la ventana de impresión. Verifica que los popups estén permitidos.'));
                    return;
                }

                // Esperar a que cargue y luego imprimir
                printWindow.onload = () => {
                    setTimeout(() => {
                        try {
                            printWindow.print();

                            // Cerrar ventana después de imprimir
                            setTimeout(() => {
                                printWindow.close();
                                URL.revokeObjectURL(blobUrl);
                                resolve();
                            }, 500);
                        } catch (error) {
                            printWindow.close();
                            URL.revokeObjectURL(blobUrl);
                            reject(error);
                        }
                    }, 250);
                };

                printWindow.onerror = () => {
                    printWindow.close();
                    URL.revokeObjectURL(blobUrl);
                    reject(new Error('Error cargando el PDF en la ventana'));
                };
            } catch (error) {
                reject(error);
            }
        });
    }
}

// Exportar instancia singleton
const printService = new PrintService();

export default printService;
