'use client';

import figlet from 'figlet';
import type { FigletOptions } from '@/types/figlet';
import { loadFont } from './fontLoader';

/**
 * Convert text to ASCII art using figlet
 */
export async function textToAscii(
  text: string,
  fontName: string = 'Standard',
  options: FigletOptions = {}
): Promise<string> {
  if (!text) {
    return '';
  }

  try {
    // Load the font
    const fontData = await loadFont(fontName);

    if (!fontData) {
      throw new Error(`Font ${fontName} could not be loaded`);
    }

    // Parse and load the font into figlet
    figlet.parseFont(fontName, fontData);

    // Generate ASCII art
    return new Promise((resolve, reject) => {
      figlet.text(
        text,
        {
          font: fontName,
          horizontalLayout: options.horizontalLayout || 'default',
          verticalLayout: options.verticalLayout || 'default',
          width: options.width,
          whitespaceBreak: options.whitespaceBreak ?? true,
        },
        (err, result) => {
          if (err) {
            reject(err);
          } else {
            resolve(result || '');
          }
        }
      );
    });
  } catch (error) {
    console.error('Error generating ASCII art:', error);
    throw error;
  }
}

/**
 * Generate ASCII art synchronously (requires font to be pre-loaded)
 */
export function textToAsciiSync(
  text: string,
  fontName: string = 'Standard',
  options: FigletOptions = {}
): string {
  if (!text) {
    return '';
  }

  try {
    return figlet.textSync(text, {
      font: fontName as any,
      horizontalLayout: options.horizontalLayout || 'default',
      verticalLayout: options.verticalLayout || 'default',
      width: options.width,
      whitespaceBreak: options.whitespaceBreak ?? true,
    });
  } catch (error) {
    console.error('Error generating ASCII art (sync):', error);
    return '';
  }
}
