using Microsoft.AspNetCore.Mvc; using Convert_It_Online.Services; namespace Convert_It_Online.Controllers { [ApiController] [Route("api/tts")] public class TtsApiController : ControllerBase { private readonly ITextToSpeechService _ttsService; private readonly ILogger _logger; public TtsApiController(ITextToSpeechService ttsService, ILogger logger) { _ttsService = ttsService; _logger = logger; } [HttpPost("generate")] public async Task Generate([FromBody] TtsRequest request) { if (string.IsNullOrWhiteSpace(request.Text)) { return BadRequest("Texto é obrigatório."); } // Limitar tamanho do texto para evitar abusos if (request.Text.Length > 5000) { return BadRequest("Texto muito longo. Máximo de 5000 caracteres."); } try { _logger.LogInformation("Gerando áudio TTS: {Length} caracteres, idioma: {Lang}", request.Text.Length, request.Language); var audioBytes = await _ttsService.GenerateAudioAsync( request.Text, request.Language ?? "pt-BR", request.Rate ?? 1.0f, request.Pitch ?? 1.0f ); return File(audioBytes, "audio/ogg", "audio.ogg"); } catch (InvalidOperationException ex) { _logger.LogWarning(ex, "TTS não disponível"); return StatusCode(503, "Serviço de síntese de voz não disponível no momento."); } catch (Exception ex) { _logger.LogError(ex, "Erro ao gerar áudio TTS"); return StatusCode(500, "Erro ao gerar áudio."); } } } public class TtsRequest { public string Text { get; set; } = string.Empty; public string? Language { get; set; } public float? Rate { get; set; } public float? Pitch { get; set; } } }