import * as plugins from './plugins.js';
import * as helpers from './helpers.js';

export interface IPdfServiceConstructorOptions {}

/**
 * a pdf service for generating pdfs
 */
export class PdfService {
  // STATIC
  public static async createAndStart(optionsArg: IPdfServiceConstructorOptions) {
    const pdfService = new PdfService(optionsArg);
    await pdfService.start();
    return pdfService;
  }

  // INSTANCE
  options: IPdfServiceConstructorOptions;

  public smartpdfInstance: plugins.smartpdf.SmartPdf;

  constructor(optionsArg: IPdfServiceConstructorOptions) {
    this.options = optionsArg;
  }

  /**
   * starts the  PdfService
   */
  public async start() {
    this.smartpdfInstance = new plugins.smartpdf.SmartPdf();
    await this.smartpdfInstance.start();
  }

  /**
   * stops the PdfService
   */
  public async stop() {
    await this.smartpdfInstance.stop();
  }

  /**
   * creates an letter
   */
  public async createPdfFromLetterObject(optionsArg: {
    letterData: plugins.tsclass.business.ILetter;
    documentSettings: plugins.shared.interfaces.IDocumentSettings;
  }) {
    const html = `
      <script type="module">
        ${await helpers.getBundleAsString()}
      </script>
      <dedocument-dedocument printMode documentSettings="${plugins.smartjson.stringifyBase64(optionsArg.documentSettings)}" letterData="${plugins.smartjson.stringifyBase64(optionsArg.letterData)}"></dedocument-dedocument>
    `;
    // console.log(html);
    const pdfResult = await this.smartpdfInstance.getA4PdfResultForHtmlString(html);
    return pdfResult;
  }
}