using System.Threading.Tasks; using Mindforge.API.Models.Requests; using Mindforge.API.Services.Interfaces; namespace Mindforge.API.Services { public class FlashcardService : IFlashcardService { private readonly IAgentService _agentService; private readonly ILogger _logger; public FlashcardService(IAgentService agentService, ILogger logger) { _agentService = agentService; _logger = logger; } public async Task GenerateFlashcardsAsync(FlashcardGenerateRequest request) { var extraPrompt = request.Mode switch { FlashcardMode.Detailed => "Crie flashcards mais detalhados.", FlashcardMode.Hyper => "Adicione também pequenas questões para fixação, para que o usuário possa testar seus conhecimentos. As questões devem ser curtas e objetivas, como se fosse cobradas em prova mesmo.", _ => "" }; string systemPrompt = $@"Você é um assistente educacional especializado em criar flashcards para o Anki. Baseado no texto fornecido, crie exatamente {request.Amount} flashcards que focam nos conceitos mais importantes e difíceis. A resposta FINAL deve ser APENAS no formato CSV, pronto para importação no Anki, sem nenhum texto adicional antes ou depois. O formato CSV deve ter duas colunas: a frente da carta (pergunta/conceito) e o verso (resposta/explicação). Use ponto e vírgula (;) como separador. Não adicione o cabeçalho. As perguntas e respostas devem estar estritamente em Português do Brasil. Exemplo de saída: ""Qual é a capital do Brasil?"";""Brasília"" ""Qual é a maior cidade do Brasil?"";""São Paulo"" Com base no arquivo fornecido, crie exatamente {request.Amount} flashcards que focam nos conceitos mais importantes e difíceis. {extraPrompt} "; string userPrompt = $"Arquivo: {request.FileName}\nConteúdo:\n{request.FileContent}"; var result = await _agentService.ProcessRequestAsync(systemPrompt, userPrompt); var lines = result.Split('\n'); if (lines.Length == 0) { throw new Exception("Nenhum flashcard gerado."); } if (lines.Length > request.Amount) { _logger.LogWarning("Quantidade de flashcards excede o limite."); } if (lines.Length < request.Amount) { _logger.LogWarning("Quantidade de flashcards abaixo do limite."); } return result; } } }