# VideoStudy.app - FASE 1 ✅

Plataforma de análise de vídeos do YouTube usando Inteligência Artificial com Semantic Kernel.

## 📋 Estrutura do Projeto

```
VideoStudy.app/
├── VideoStudy.API/              # ASP.NET Core Web API (Semantic Kernel)
├── VideoStudy.Desktop/          # Blazor Hybrid Desktop Application
│   ├── VideoStudy.Desktop/      # Server project
│   └── VideoStudy.Desktop.Client/ # Client project
├── VideoStudy.Shared/           # Shared models and interfaces
├── Tests/                       # Test projects
├── REFERENCES.md                # Análise de referências
└── README.md                    # Este arquivo
```

## 🚀 Quick Start

### Pré-requisitos
- **.NET 8.0 SDK** ou superior
- **Visual Studio 2022 / VS Code** (opcional)

### 1. Clonar/Abrir Projeto
```bash
cd /mnt/c/vscode/VideoStudy.app
```

### 2. Restaurar Dependências
```bash
dotnet restore
```

### 3. Executar a API

#### Opção A: Com Ollama (Local, Grátis)
Certifique-se que Ollama está rodando em `http://localhost:11434`

```bash
cd VideoStudy.API
dotnet run
```

A API estará disponível em: `http://localhost:5000`

#### Opção B: Com Groq (Cloud, Grátis)
1. Crie conta em https://console.groq.com
2. Gere API Key
3. Configure em `VideoStudy.API/appsettings.json`:

```json
"LlmSettings": {
  "Provider": "Groq",
  "ModelId": "llama-3.1-8b-instant",
  "Endpoint": "https://api.groq.com/openai/v1",
  "ApiKey": "your-groq-api-key"
}
```

```bash
cd VideoStudy.API
dotnet run
```

### 4. Executar Desktop App (em outro terminal)

```bash
cd VideoStudy.Desktop/VideoStudy.Desktop
dotnet run
```

A aplicação estará disponível em: `http://localhost:5001`

## 📡 Endpoints da API

### Health Check
```
GET /health
```

Resposta:
```json
{
  "status": "ok",
  "timestamp": "2026-02-06T10:00:00Z"
}
```

### Analisar Vídeo
```
POST /api/analyze
Content-Type: application/json

{
  "videoUrl": "https://www.youtube.com/watch?v=...",
  "language": "en",
  "mode": "fast"
}
```

Resposta:
```json
{
  "videoTitle": "Video Title",
  "transcript": "Topics covered...",
  "analysis": "Detailed analysis...",
  "keyMoments": [
    {
      "timestamp": "00:00:30",
      "description": "Key moment description",
      "startSeconds": 30
    }
  ],
  "status": "success",
  "errorMessage": null
}
```

## 🏗️ Arquitetura

### VideoStudy.Shared
Modelos compartilhados entre API e Desktop:
- `AnalysisRequest` - Entrada do usuário
- `AnalysisResponse` - Resposta da análise
- `KeyMoment` - Momento importante no vídeo
- `ProgressUpdate` - Atualização de progresso

### VideoStudy.API
- **Framework**: ASP.NET Core 8.0
- **AI Integration**: Semantic Kernel 1.70.0
- **LLM Providers**:
  - Groq (padrão)
  - Ollama (local)
  - OpenAI (opcional)
- **CORS**: Habilitado para todas as origens (desenvolvimento)

### VideoStudy.Desktop
- **Framework**: Blazor Hybrid
- **UI**: Bootstrap 5 + Razor Components
- **Comunicação**: HttpClient para chamadas à API
- **Recursos**:
  - URL input para vídeos do YouTube
  - Seleção de idioma
  - Modo Fast/Advanced
  - Barra de progresso
  - Debug logs
  - Tratamento de erros

## 🔧 Configuração Avançada

### Mudar LLM Provider

Edite `VideoStudy.API/Program.cs` (linhas 21-37):

#### Para Ollama:
```csharp
builder.Services.AddOllamaChatCompletion(
    "llama2",
    new Uri("http://localhost:11434")
);
```

#### Para OpenAI GPT-4:
```csharp
builder.Services.AddOpenAIChatCompletion(
    "gpt-4o-mini",
    "sk-proj-your-key"
);
```

#### Para Google Gemini:
```csharp
builder.Services.AddGoogleAIGeminiChatCompletion(
    "gemini-1.5-flash-latest",
    "your-google-api-key"
);
```

### Build para Produção

```bash
dotnet build -c Release
dotnet publish -c Release -o ./publish
```

## 📊 FASE 2 - Status

✅ **Concluído:**
- Download de vídeos do YouTube (YoutubeExplode)
- Extração de legendas (Modo Rápido)
- Transcrição com Whisper.NET (Modo Avançado)
- Extração de screenshots (FFmpeg)
- Fluxo completo: URL → Transcrição → Análise IA → Screenshots
- Progress reporting em tempo real

❌ **Não incluído (FASE 3):**
- Geração de PDF
- UI refinada (Design System)
- Persistência (MongoDB)
- Autenticação

## 🔧 Requisitos Externos (Fase 2)

### FFmpeg
Para que o "Modo Avançado" (Whisper e Screenshots) funcione, o **FFmpeg** deve estar instalado e acessível no PATH do sistema.

**Linux (Ubuntu/Debian):**
```bash
sudo apt update && sudo apt install ffmpeg
```

**Windows:**
Baixe em [ffmpeg.org](https://ffmpeg.org/download.html) e adicione a pasta `bin` às Variáveis de Ambiente.

### Whisper Model
O modelo de IA (base) será baixado automaticamente na primeira execução para a pasta `VideoStudy.Desktop/bin/Debug/net8.0/models/`.

## 🔄 FASE 3 - Próximos Passos

Será implementado:
- YouTubeService (YoutubeExplode)
- TranscriptionService (Whisper.NET)
- ScreenshotService (FFmpeg)
- Modos: Fast (legendas) e Advanced (Whisper)
- Progress reporting em tempo real
- Tratamento robusto de erros

## 📝 Notas

- A API tem CORS habilitado para todos os domínios (alterar para produção!)
- Sem autenticação no momento (adicionar em FASE 3)
- LLM provider deve estar ativo antes de iniciar (Ollama ou Groq)
- Desktop aguarda API em `http://localhost:5000` (configurável)

## 🐛 Troubleshooting

### Erro: "Unable to connect to API"
- Verifique se a API está rodando: `dotnet run` em `VideoStudy.API`
- Confirme que porta 5000 está livre
- Verifique `appsettings.json` no Desktop: `BaseUrl` deve ser `http://localhost:5000`

### Erro: "LLM Provider not available"
- **Se usar Groq**: Verifique API key em `VideoStudy.API/appsettings.json`
- **Se usar Ollama**: Certifique-se que Ollama está rodando (`ollama serve`)

### Erro: "ModelId not found"
- Verifique o nome do modelo em `appsettings.json`
- Ollama: modelos podem ser listados com `ollama list`
- Groq: `llama-3.1-8b-instant` é o padrão

## 📞 Versões de Dependências

| Package | Versão | Propósito |
|---------|--------|-----------|
| Microsoft.SemanticKernel | 1.70.0 | IA Integration |
| Microsoft.SemanticKernel.Connectors.OpenAI | 1.70.0 | OpenAI-compatible |
| Microsoft.SemanticKernel.Connectors.Ollama | 1.70.0-alpha | Local LLM |
| Bootstrap | 5.3.2 | CSS Framework (Desktop) |

## 📄 Licença

Projeto em desenvolvimento - Todos os direitos reservados

---

**Última atualização:** 2026-02-06
**Fase:** 1 (Estrutura Base)
**Status:** ✅ Pronto para FASE 2
