using BaseDomain.Results; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Configuration; using Postall.Domain.Dtos; using Postall.Domain.Services.Contracts; using System; using System.Collections.Generic; using System.Linq; using System.Security.Claims; using System.Text; using System.Threading.Tasks; namespace Postall.Infra.Services { public class ChannelYoutubeService: IChannelYoutubeService { private readonly IConfiguration _configuration; private readonly string _apiKey; public ChannelYoutubeService(IConfiguration configuration) { _configuration = configuration; _apiKey = _configuration["YouTube:ApiKey"]; } /// /// Busca os detalhes de um canal na API do YouTube /// public async Task> GetChannelDetailsAsync(string channelId) { var youtubeService = new YouTubeBaseServiceWrapper(_apiKey); var channelsRequest = youtubeService.Channels.List("snippet,statistics,contentDetails"); channelsRequest.Id = channelId; var response = await channelsRequest.ExecuteAsync(); if (response.Items.Count == 0) throw new Exception($"Canal não encontrado: {channelId}"); var channel = response.Items[0]; return new ChannelResponse { Id = channel.Id, Title = channel.Snippet.Title, Description = channel.Snippet.Description, ThumbnailUrl = channel.Snippet.Thumbnails.Default__.Url, PublishedAt = channel.Snippet.PublishedAt.Value, SubscriberCount = channel.Statistics.SubscriberCount.GetValueOrDefault(), VideoCount = channel.Statistics.VideoCount.GetValueOrDefault() }; } /// /// Busca um canal pelo nome ou ID /// public async Task>> SearchChannelsAsync(string query, int maxResults = 5) { if (string.IsNullOrEmpty(query) || query.Length < 3) return new List(); var youtubeService = new YouTubeBaseServiceWrapper(_apiKey); var searchRequest = youtubeService.Search.List("snippet"); searchRequest.Q = query; searchRequest.Type = "channel"; searchRequest.MaxResults = maxResults; var searchResponse = await searchRequest.ExecuteAsync(); var results = new List(); foreach (var item in searchResponse.Items) { results.Add(new ChannelResponse { Id = item.Id.ChannelId, Title = item.Snippet.Title, Description = item.Snippet.Description, ThumbnailUrl = item.Snippet.Thumbnails.Default__.Url, PublishedAt = item.Snippet.PublishedAt.Value }); } return results; } } // Classe auxiliar para dados básicos de canal public class ChannelData { public string Id { get; set; } public string Title { get; set; } } }