using Microsoft.AspNetCore.Mvc; using SumaTube.Application.Videos.ApplicationServices; using SumaTube.Application.Videos.Contracts; using SumaTube.Domain.Entities.Videos; using SumaTube.Models; using System.Collections.Generic; namespace SumaTube.Controllers { public class VideoController : Controller { private readonly IVideoApplicationService _videoApplicationService; private readonly ILogger _logger; public VideoController( IVideoApplicationService videoApplicationService, ILogger logger) { _videoApplicationService = videoApplicationService; _logger = logger; } public IActionResult Extract() { return View(); } public async Task VideoSummary(string id) { // Aqui você chamaria sua WebAPI para processar o vídeo // e retornaria o modelo para a view var model = new VideoSummaryViewModel { VideoId = id, VideoTitle = "Título do Vídeo", ChannelName = "Nome do Canal", ChannelThumbnail = "URL da Thumbnail do Canal", PublishedDate = "Data de Publicação", ViewCount = "Quantidade de Visualizações", LikeCount = "Quantidade de Curtidas", CommentCount = "Quantidade de Comentarios", SummaryText = "Resumo do Vídeo", KeyPoints = new List { "Ponto 1", "Ponto 2", "Ponto 3" }, Captions = new List { "Legenda 1", "Legenda 2", "Legenda 3" }, Keywords = new List { "Palavra 1", "Palavra 2", "Palavra 3" }, RelatedTopics = new List { "Tópico 1", "Tópico 2", "Tópico 3" }, RelatedVideos = new List { "Vídeo 1", "Vídeo 2", "Vídeo 3" } }; return View(model); } public async Task MySummary() { var userId = User.Identity.Name; // Ou outra forma de obter o ID do usuário _logger.LogInformation("Carregando página 'Meus Resumos' para usuário: {UserId}", userId); var videos = new List(); if (userId != null) videos = await _videoApplicationService.GetUserVideosAsync(userId); return View(videos); } // Endpoint para enviar solicitação de novo resumo [HttpPost] public async Task RequestSummary(string youtubeUrl, string language) { var userId = User.Identity.Name; // Ou outra forma de obter o ID do usuário _logger.LogInformation("Recebido pedido de resumo. URL: {Url}, Idioma: {Language}, Usuário: {UserId}", youtubeUrl, language, userId); try { var result = await _videoApplicationService.RequestVideoSummaryAsync(youtubeUrl, language, userId); _logger.LogInformation("Resumo solicitado com sucesso. ID: {Id}", result.Id); return Json(new { success = true, videoId = result.VideoId, summaryId = result.Id }); } catch (Exception ex) { _logger.LogError(ex, "Erro ao solicitar resumo: {Message}", ex.Message); return Json(new { success = false, error = ex.Message }); } } // Página para exibir um resumo específico public async Task Summary(string id) { var userId = User.Identity.Name; // Ou outra forma de obter o ID do usuário _logger.LogInformation("Acessando resumo. ID: {Id}, Usuário: {UserId}", id, userId); var summary = await _videoApplicationService.GetVideoSummaryByIdAsync(id, userId); if (summary == null) { _logger.LogWarning("Resumo não encontrado. ID: {Id}", id); return NotFound(); } return View(summary); } // Endpoint para verificar status de processamento [HttpGet] public async Task CheckStatus(string id) { var userId = User.Identity.Name; // Ou outra forma de obter o ID do usuário _logger.LogInformation("Verificando status do resumo. ID: {Id}, Usuário: {UserId}", id, userId); var status = await _videoApplicationService.CheckSummaryStatusAsync(id, userId); return Json(status); } } }