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; }
}
}