Я хочу изменить логику формирования Markdown-отчета в методе `buildMarkdownFromReport` класса `MarketingAnalysisService`.

Сейчас метод создает Markdown-таблицы (ASCII tables) для отображения данных (сезонность, конкуренты и т.д.).
Мне нужно изменить это поведение: вместо таблиц я хочу встраивать JSON-данные для графиков прямо в текст отчета, используя Markdown code blocks.

**Требования:**

1. Найди метод `buildMarkdownFromReport`.
2. В местах, где сейчас формируются таблицы (например, для "seasonality", "competitors", "audienceSegmentation", "channelsPotential", "conversionFunnel"), замени генерацию таблиц на вставку JSON-блока.
3. Формат блока должен быть таким:
   ```json:chart-type
   { ... json data ... }
   ```

````

Где `chart-type` — это идентификатор типа графика (например, `json:seasonality`, `json:competitors`, `json:funnel`). Это поможет фронтенду понять, какой компонент графика рисовать.
4\. Используй поле `objectMapper` для сериализации соответствующих карт/списков (chartsData) в JSON-строку перед вставкой.
5\. Убедись, что JSON отформатирован красиво (pretty print), чтобы он был читаемым, если смотреть на raw text.

**Пример желаемого результата в Markdown:**
Вместо таблицы с месяцами, должно получиться:

### 1️⃣ Сезонность спроса (12 месяцев)

```json:seasonality
{
  "Январь": 70,
  "Февраль": 60,
  ...
}
```

Пожалуйста, рефактори метод `buildMarkdownFromReport` соответствующим образом.

````

---

### Как это будет работать (для твоего понимания)

После того как Cursor применит изменения, твой метод `buildMarkdownFromReport` будет выглядеть примерно так (псевдокод):

````java
// Внутри buildMarkdownFromReport

// ... заголовки ...

if (chartsData.containsKey("seasonality")) {
    markdown.append("### 1️⃣ Сезонность спроса (12 месяцев)\n\n");

    // Сериализуем данные в JSON
    String jsonStr = objectMapper.writerWithDefaultPrettyPrinter()
                                 .writeValueAsString(chartsData.get("seasonality"));

    // Вставляем как блок кода с уникальным идентификатором языка
    markdown.append("```json:seasonality\n");
    markdown.append(jsonStr);
    markdown.append("\n```\n\n");
}
````

### Что нужно сделать на Фронтенде?

Так как мы изменили подход, фронтенд (React/Vue) должен использовать библиотеку для рендеринга Markdown (например, `react-markdown`).

Тебе нужно будет написать кастомный рендерер для элементов `code`.

**Пример логики для фронтенда (React + react-markdown):**

```javascript
import ReactMarkdown from 'react-markdown';
import { SeasonalityChart, FunnelChart } from './MyCharts'; // Твои компоненты графиков

const MarkdownRender = ({ content }) => {
  return (
    <ReactMarkdown
      components={{
        code({ node, inline, className, children, ...props }) {
          const match = /language-(\w+):(\w+)/.exec(className || '');
          // match[1] будет "json", match[2] будет тип графика (seasonality, funnel и т.д.)

          if (!inline && match && match[1] === 'json') {
            const chartType = match[2];
            const data = JSON.parse(String(children).replace(/\n$/, ''));

            switch (chartType) {
              case 'seasonality':
                return <SeasonalityChart data={data} />;
              case 'funnel':
                return <FunnelChart data={data} />;
              default:
                return <pre>{children}</pre>; // Фоллбек
            }
          }

          return (
            <code className={className} {...props}>
              {children}
            </code>
          );
        },
      }}
    >
      {content}
    </ReactMarkdown>
  );
};
```
