//package com.example.quiz.utils;
//
//import android.annotation.SuppressLint;
//import android.bluetooth.BluetoothAdapter;
//import android.bluetooth.BluetoothDevice;
//import android.content.Context;
//import android.graphics.Bitmap;
//import android.graphics.BitmapFactory;
//import android.graphics.Color;
//import android.os.Environment;
//import android.util.Log;
//import android.widget.Toast;
//
//import java.io.ByteArrayOutputStream;
//import java.io.File;
//import java.io.FileOutputStream;
//import java.io.IOException;
//import java.io.InputStream;
//import java.util.Set;
//
//import tspl.HPRTPrinterHelper;
//
//public class HPRTPrinterUtil {
//
//    private static final String TAG = "HPRTPrinterUtil";
//    private Context context;
//
//    BluetoothAdapter mBluetoothAdapter;
//
//    public HPRTPrinterUtil(Context context) {
//        this.context = context;
//    }
//
//
//
//    @SuppressLint("MissingPermission")
//    public boolean autoConnectBluetoothByName() {
//        try {
//            BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
//            if (bluetoothAdapter == null || !bluetoothAdapter.isEnabled()) {
//                Toast.makeText(context, "Bluetooth désactivé ou non disponible", Toast.LENGTH_LONG).show();
//                return false;
//            }
//
//            Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBondedDevices();
//            if (pairedDevices != null) {
//                for (BluetoothDevice device : pairedDevices) {
//                    if (device.getName() != null && device.getName().contains("MP4P Printer")) {
//                        String btAddress = device.getAddress();
//
//                        // Connexion via ton SDK HPRT
//                        int result = HPRTPrinterHelper.PortOpen("Bluetooth," + btAddress);
//                        if (result == 0) {
//                            Toast.makeText(context, "Imprimante connectée : " + device.getName(), Toast.LENGTH_SHORT).show();
//                            Log.d(TAG, "Connexion réussie : " + device.getName() + " - " + btAddress);
//                            return true;
//                        } else {
//                            Toast.makeText(context, "Erreur connexion imprimante: " + result, Toast.LENGTH_SHORT).show();
//                            Log.e(TAG, "Erreur connexion imprimante: " + result);
//                            return false;
//                        }
//                    }
//                }
//            }
//
//            Toast.makeText(context, "Imprimante non trouvée. Veuillez appairer d'abord.", Toast.LENGTH_LONG).show();
//            return false;
//
//        } catch (Exception e) {
//            e.printStackTrace();
//            Toast.makeText(context, "Erreur auto-connexion : " + e.getMessage(), Toast.LENGTH_LONG).show();
//            return false;
//        }
//    }
//
//
//    public boolean connectBluetooth(String btAddress) {
//        try {
//            HPRTPrinterHelper.PortClose(); // ferme toute connexion existante
//            int result = HPRTPrinterHelper.PortOpen("Bluetooth," + btAddress);
//            if (result == 0) {
//                Log.d(TAG, "Connexion réussie");
//                Toast.makeText(context, "Imprimante connectée", Toast.LENGTH_SHORT).show();
//                return true;
//            } else {
//                Log.e(TAG, "Erreur connexion: " + result);
//                Toast.makeText(context, "Erreur connexion imprimante: " + result, Toast.LENGTH_SHORT).show();
//                return false;
//            }
//        } catch (Exception e) {
//            Log.e(TAG, "Erreur connexion: " + e.getMessage());
//            return false;
//        }
//    }
//
//    public void printText(Bitmap logo, StringBuilder text) {
//        try {
//            if (!HPRTPrinterHelper.IsOpened()) {
//                Toast.makeText(context, "Imprimante non connectée", Toast.LENGTH_SHORT).show();
//                return;
//            }
//
//
//            Bitmap resized = resizeForPrinter(logo, 384);
//
//            HPRTPrinterHelper.printImage("0", "0", resized, false);
//
//            String tspl = ""+ text + "\r\n";
//
//
//
//
//            // Envoi à l'imprimante
//            //HPRTPrinterHelper.PrintData(tspl);
//
//            Log.d(TAG, "Texte imprimé sur ticket"); // on log seulement le succès
//
//        } catch (Exception e) {
//            Log.e(TAG, "Erreur impression TSPL: " + e.getMessage());
//            Toast.makeText(context, "Erreur impression TSPL", Toast.LENGTH_SHORT).show();
//        }
//    }
//
//
//
//
//    public void printTSPLTemplate(String tsplTemplate) {
//        try {
//            if (!HPRTPrinterHelper.IsOpened()) {
//                Toast.makeText(context, "Imprimante non connectée", Toast.LENGTH_SHORT).show();
//                return;
//            }
//
//            HPRTPrinterHelper.PrintData(tsplTemplate);
//            Log.d(TAG, "Template imprimé");
//        } catch (Exception e) {
//            Log.e(TAG, "Erreur impression TSPL: " + e.getMessage());
//            Toast.makeText(context, "Erreur impression TSPL", Toast.LENGTH_SHORT).show();
//        }
//    }
//
//    public static Bitmap toMonochrome(Bitmap src) {
//        int width = src.getWidth();
//        int height = src.getHeight();
//
//        // Bitmap de sortie en ARGB_8888
//        Bitmap bw = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
//
//        for (int y = 0; y < height; y++) {
//            for (int x = 0; x < width; x++) {
//                int pixel = src.getPixel(x, y);
//
//                // Calcul de la luminance (grayscale)
//                int gray = (Color.red(pixel) + Color.green(pixel) + Color.blue(pixel)) / 3;
//
//                // Seuil pour décider noir ou blanc
//                if (gray < 128) {
//                    bw.setPixel(x, y, Color.BLACK);
//                } else {
//                    bw.setPixel(x, y, Color.WHITE);
//                }
//            }
//        }
//
//        return bw;
//    }
//
//
//    public static byte[] bitmapToEscPos(Bitmap bitmap) throws IOException {
//        bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, false);
//
//        int width = bitmap.getWidth();
//        int height = bitmap.getHeight();
//
//        int bytesPerRow = (width + 7) / 8;
//        byte[] imageBytes = new byte[bytesPerRow * height];
//
//        int index = 0;
//
//        for (int y = 0; y < height; y++) {
//            int bitIndex = 0;
//            byte currentByte = 0;
//
//            for (int x = 0; x < width; x++) {
//                int color = bitmap.getPixel(x, y);
//                int gray = (Color.red(color) + Color.green(color) + Color.blue(color)) / 3;
//
//                currentByte <<= 1;
//                if (gray < 128) currentByte |= 1;
//
//                bitIndex++;
//
//                if (bitIndex == 8) {
//                    imageBytes[index++] = currentByte;
//                    currentByte = 0;
//                    bitIndex = 0;
//                }
//            }
//
//            if (bitIndex > 0) {
//                currentByte <<= (8 - bitIndex);
//                imageBytes[index++] = currentByte;
//            }
//        }
//
//        // Préfixe ESC/POS GS v 0
//        ByteArrayOutputStream baos = new ByteArrayOutputStream();
//        baos.write(0x1D);
//        baos.write('v');
//        baos.write('0');
//        baos.write(0); // Normal mode
//        baos.write(bytesPerRow & 0xFF);
//        baos.write((bytesPerRow >> 8) & 0xFF);
//        baos.write(height & 0xFF);
//        baos.write((height >> 8) & 0xFF);
//        baos.write(imageBytes);
//
//        return baos.toByteArray();
//    }
//
//
//    public static Bitmap resizeForPrinter(Bitmap bmp, int maxWidth){
//        if(bmp.getWidth() <= maxWidth) return bmp;
//        int newHeight = bmp.getHeight() * maxWidth / bmp.getWidth();
//        return Bitmap.createScaledBitmap(bmp, maxWidth, newHeight, false);
//    }
//
//    // 2. Convertir le bitmap monochrome en flux binaire TSPL
//    public static byte[] bitmapToTsplBinary(Bitmap bmp){
//        int width = bmp.getWidth();
//        int height = bmp.getHeight();
//        int bytesPerRow = (width + 7) / 8;
//        byte[] data = new byte[bytesPerRow*height];
//        int index = 0;
//        for(int y=0;y<height;y++){
//            int bitIndex = 0;
//            byte currentByte = 0;
//            for(int x=0;x<width;x++){
//                int pixel = bmp.getPixel(x, y);
//                currentByte <<= 1;
//                if(pixel == Color.BLACK) currentByte |= 1;
//                bitIndex++;
//                if(bitIndex==8){
//                    data[index++] = currentByte;
//                    currentByte = 0;
//                    bitIndex = 0;
//                }
//            }
//            if(bitIndex != 0){
//                currentByte <<= (8 - bitIndex);
//                data[index++] = currentByte;
//            }
//        }
//        return data;
//    }
//
//    /**
//     * Déconnecte l'imprimante
//     */
//    public void disconnect() {
//        try {
//            HPRTPrinterHelper.PortClose();
//            Toast.makeText(context, "Imprimante déconnectée", Toast.LENGTH_SHORT).show();
//        } catch (Exception e) {
//            Log.e(TAG, "Erreur déconnexion: " + e.getMessage());
//        }
//    }
//}
