import QRCode from 'qrcode';
import bwipjs from 'bwip-js';
import { CloudStorageService } from './cloud-storage.service';

export class QRGeneratorService {
  static async generatePitQRCode(pitGuid: string, pitName: string): Promise<string> {
    const qrData = JSON.stringify({
      guid: pitGuid,
      name: pitName,
      type: 'WM-IMS-PIT',
      version: '2.0',
      timestamp: new Date().toISOString(),
    });

    const qrBuffer = await QRCode.toBuffer(qrData, {
      type: 'png',
      width: 400,
      margin: 2,
      color: { dark: '#000000', light: '#FFFFFF' },
      errorCorrectionLevel: 'H',
    });

    return CloudStorageService.upload(qrBuffer, `${pitGuid}_qr.png`, 'image/png');
  }

  static async generatePitBarcode(pitGuid: string): Promise<string> {
    const barcodeBuffer: Buffer = await new Promise((resolve, reject) => {
      bwipjs.toBuffer(
        {
          bcid: 'code128',
          text: pitGuid,
          scale: 3,
          height: 10,
          includetext: true,
          textxalign: 'center',
        },
        (err, png) => {
          if (err) reject(err);
          else resolve(png as Buffer);
        }
      );
    });

    return CloudStorageService.upload(barcodeBuffer, `${pitGuid}_barcode.png`, 'image/png');
  }
}
