# Руководство по API генерации исследовательских отчётов

## Обзор

Новый эндпоинт `/api/parser/report` интегрирован с сервисом `deep-research` для генерации PDF-отчётов на основе пользовательских запросов.

## Эндпоинт

**POST** `/api/parser/report`

### Параметры запроса

| Параметр      | Тип     | Обязательный | По умолчанию | Описание                        |
| ------------- | ------- | ------------ | ------------ | ------------------------------- |
| `query`       | string  | ✅           | -            | Тема для исследования           |
| `lang`        | string  | ❌           | "ru"         | Язык отчёта ("ru", "en")        |
| `depth`       | integer | ❌           | 3            | Глубина исследования (1-5)      |
| `breadth`     | integer | ❌           | 5            | Широта исследования (2-10)      |
| `report_type` | string  | ❌           | "report"     | Тип отчёта ("report", "answer") |

### Пример запроса

```json
{
  "query": "Искусственный интеллект в здравоохранении",
  "lang": "ru",
  "depth": 3,
  "breadth": 5,
  "report_type": "report"
}
```

### Ответы

#### Успешный ответ (200 OK)

- **Content-Type**: `application/pdf`
- **Content-Disposition**: `attachment; filename="research_report_[timestamp].pdf"`
- **Тело**: PDF-файл с отчётом

#### Ошибки

| Код | Описание                                  |
| --- | ----------------------------------------- |
| 400 | Некорректные параметры запроса            |
| 500 | Внутренняя ошибка сервера                 |
| 504 | Таймаут при обращении к deep-research API |

## Структура PDF-отчёта

Сгенерированный PDF содержит:

1. **Титульная страница**

   - Название исследования (из поля `query`)
   - Дата создания
   - Подзаголовок "Исследовательский отчёт"

2. **Содержание**

   - Автоматически сгенерированное оглавление

3. **Основная часть**

   - Введение
   - Основной текст отчёта от deep-research API
   - Заключение

4. **Источники**
   - Список URL-адресов из поля `visitedUrls`

## Конфигурация

Настройки в `application.properties`:

```properties
# Deep Research API Configuration
deep-research.api.url=http://185.35.223.45:3051
deep-research.api.timeout=300000
```

## Примеры использования

### cURL

```bash
curl -X POST "http://localhost:8080/api/parser/report" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "Блокчейн технологии в финансах",
    "lang": "ru",
    "depth": 4,
    "breadth": 6
  }' \
  --output "blockchain_report.pdf"
```

### JavaScript (fetch)

```javascript
const response = await fetch('/api/parser/report', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    query: 'Квантовые вычисления',
    lang: 'ru',
    depth: 3,
    breadth: 5,
    report_type: 'report',
  }),
});

if (response.ok) {
  const blob = await response.blob();
  const url = window.URL.createObjectURL(blob);
  const a = document.createElement('a');
  a.href = url;
  a.download = 'quantum_computing_report.pdf';
  a.click();
}
```

### Python (requests)

```python
import requests

response = requests.post(
    'http://localhost:8080/api/parser/report',
    json={
        'query': 'Машинное обучение в медицине',
        'lang': 'ru',
        'depth': 3,
        'breadth': 5,
        'report_type': 'report'
    }
)

if response.status_code == 200:
    with open('ml_medicine_report.pdf', 'wb') as f:
        f.write(response.content)
    print("Отчёт сохранён как ml_medicine_report.pdf")
else:
    print(f"Ошибка: {response.status_code}")
```

## Тестирование

Для тестирования API используйте скрипт `test_research_api.sh`:

```bash
./test_research_api.sh
```

## Логирование

Все операции логируются. Для отладки проверьте логи приложения:

```bash
tail -f logs/application.log | grep "DeepResearchService\|ResearchPdfService"
```

## Ограничения

- Максимальное время ожидания: 5 минут (300 секунд)
- Размер генерируемого PDF ограничен только ресурсами сервера
- Deep-research API должен быть доступен по указанному URL

## Устранение неполадок

### Ошибка 504 (Gateway Timeout)

- Проверьте доступность deep-research API
- Увеличьте timeout в конфигурации
- Проверьте сетевые настройки

### Ошибка 500 (Internal Server Error)

- Проверьте логи приложения
- Убедитесь, что все зависимости установлены
- Проверьте конфигурацию MinIO для сохранения файлов

### Пустой PDF

- Проверьте, что deep-research API возвращает корректные данные
- Убедитесь, что поле `report` или `answer` в ответе не пустое
