/**
 * Универсальная система разметки текста для WitLab Funnel
 * 
 * Поддерживаемые теги:
 * **текст** - жирный текст
 * ~~текст~~ - зачёркнутый текст
 * 
 * Примеры использования:
 * "Добро пожаловать в **WitLab**!" → "Добро пожаловать в <strong>WitLab</strong>!"
 * "**50%** скидка только сегодня" → "<strong>50%</strong> скидка только сегодня"
 */

export interface TextMarkupSegment {
  type: 'text' | 'bold' | 'strike';
  content: string;
}

/**
 * Парсит текст с разметкой **bold** и возвращает массив сегментов
 */
export function parseTextMarkup(text: string): TextMarkupSegment[] {
  if (!text || typeof text !== 'string') {
    return [{ type: 'text', content: text || '' }];
  }

  const segments: TextMarkupSegment[] = [];
  // Ищем как жирный (**...**), так и зачёркнутый (~~...~~) текст
  const tokenRegex = /(\*\*(.*?)\*\*|~~(.*?)~~)/g;
  let lastIndex = 0;
  let match;

  while ((match = tokenRegex.exec(text)) !== null) {
    const matchStart = match.index;
    const matchEnd = tokenRegex.lastIndex;
    const boldContent = match[2];
    const strikeContent = match[3];

    // Добавляем обычный текст перед жирным (если есть)
    if (matchStart > lastIndex) {
      const normalText = text.slice(lastIndex, matchStart);
      if (normalText) {
        segments.push({ type: 'text', content: normalText });
      }
    }

    // Добавляем найденный сегмент
    if (boldContent !== undefined) {
      segments.push({ type: 'bold', content: boldContent });
    } else if (strikeContent !== undefined) {
      segments.push({ type: 'strike', content: strikeContent });
    }

    lastIndex = matchEnd;
  }

  // Добавляем оставшийся обычный текст
  if (lastIndex < text.length) {
    const remainingText = text.slice(lastIndex);
    if (remainingText) {
      segments.push({ type: 'text', content: remainingText });
    }
  }

  // Если нет жирного текста, возвращаем весь текст как обычный
  if (segments.length === 0) {
    segments.push({ type: 'text', content: text });
  }

  return segments;
}

/**
 * Проверяет, содержит ли текст разметку
 */
export function hasTextMarkup(text: string): boolean {
  return /(\*\*(.*?)\*\*|~~(.*?)~~)/g.test(text || '');
}

/**
 * Убирает разметку из текста, оставляя только чистый текст
 */
export function stripTextMarkup(text: string): string {
  if (!text || typeof text !== 'string') {
    return text || '';
  }
  
  return text
    .replace(/\*\*(.*?)\*\*/g, '$1')
    .replace(/~~(.*?)~~/g, '$1');
}

/**
 * Примеры для тестирования
 */
export const MARKUP_EXAMPLES = [
  {
    input: "Добро пожаловать в **WitLab**!",
    description: "Выделение названия продукта"
  },
  {
    input: "**50%** скидка только сегодня",
    description: "Выделение процента скидки"
  },
  {
    input: "Ваш **идеальный партнер** найден!",
    description: "Выделение ключевой фразы"
  },
  {
    input: "**Анализ завершен** - переходим к результатам",
    description: "Выделение статуса"
  },
  {
    input: "Поздравляем, **Анна**! Ваш портрет готов.",
    description: "Выделение имени пользователя"
  },
  {
    input: "Старая цена ~~1990₽~~, новая **990₽**",
    description: "Комбинация зачёркнутого и жирного"
  }
] as const;
