import axios from 'axios';

export class YouTubeService {
  private apiKey: string;

  constructor(apiKey: string) {
    this.apiKey = apiKey;
  }

  /**
   * Busca informações de um vídeo do YouTube pelo ID
   * @param videoId ID do vídeo do YouTube
   * @returns Informações do vídeo
   */
  public async getVideoInfo(videoId: string): Promise<any> {
    try {
      const response = await axios.get('https://www.googleapis.com/youtube/v3/videos', {
        params: {
          part: 'snippet,contentDetails,statistics',
          id: videoId,
          key: this.apiKey
        }
      });

      if (response.data.items && response.data.items.length > 0) {
        return response.data.items[0];
      }
      
      return null;
    } catch (error) {
      console.error('Erro ao buscar informações do vídeo:', error);
      throw error;
    }
  }

  /**
   * Verifica se um canal do YouTube está ao vivo
   * @param channelId ID do canal do YouTube
   * @returns Informações da transmissão ao vivo, se existir
   */
  public async checkLiveStream(channelId: string): Promise<any> {
    try {
      // Primeiro, busca os vídeos ao vivo do canal
      const response = await axios.get('https://www.googleapis.com/youtube/v3/search', {
        params: {
          part: 'snippet',
          channelId: channelId,
          eventType: 'live',
          type: 'video',
          key: this.apiKey
        }
      });

      if (response.data.items && response.data.items.length > 0) {
        // Se encontrou uma transmissão ao vivo, busca mais detalhes
        const liveVideoId = response.data.items[0].id.videoId;
        return await this.getVideoInfo(liveVideoId);
      }
      
      return null;
    } catch (error) {
      console.error('Erro ao verificar transmissão ao vivo:', error);
      throw error;
    }
  }

  /**
   * Busca os últimos vídeos de um canal
   * @param channelId ID do canal do YouTube
   * @param maxResults Número máximo de resultados (padrão: 10)
   * @returns Lista de vídeos
   */
  public async getChannelVideos(channelId: string, maxResults: number = 10): Promise<any[]> {
    try {
      const response = await axios.get('https://www.googleapis.com/youtube/v3/search', {
        params: {
          part: 'snippet',
          channelId: channelId,
          maxResults: maxResults,
          order: 'date',
          type: 'video',
          key: this.apiKey
        }
      });

      if (response.data.items && response.data.items.length > 0) {
        return response.data.items;
      }
      
      return [];
    } catch (error) {
      console.error('Erro ao buscar vídeos do canal:', error);
      throw error;
    }
  }
}
