import { Request, Response } from 'express';
import { YouTubeService } from '../services/youtubeService';
import env from '../config/env';

export class YouTubeController {
  private static youtubeService = new YouTubeService(process.env.YOUTUBE_API_KEY || '');

  // Obter informações de um vídeo
  public static async getVideoInfo(req: Request, res: Response): Promise<void> {
    try {
      const { videoId } = req.params;
      
      if (!videoId) {
        res.status(400).json({ 
          success: false, 
          message: 'ID do vídeo é obrigatório' 
        });
        return;
      }
      
      const videoInfo = await YouTubeController.youtubeService.getVideoInfo(videoId);
      
      if (!videoInfo) {
        res.status(404).json({ 
          success: false, 
          message: 'Vídeo não encontrado' 
        });
        return;
      }
      
      res.json({ 
        success: true, 
        data: videoInfo 
      });
    } catch (error) {
      console.error('Erro ao buscar informações do vídeo:', error);
      res.status(500).json({ 
        success: false, 
        message: 'Erro ao buscar informações do vídeo' 
      });
    }
  }

  // Verificar se um canal está ao vivo
  public static async checkLiveStream(req: Request, res: Response): Promise<void> {
    try {
      const { channelId } = req.params;
      
      if (!channelId) {
        res.status(400).json({ 
          success: false, 
          message: 'ID do canal é obrigatório' 
        });
        return;
      }
      
      const liveStream = await YouTubeController.youtubeService.checkLiveStream(channelId);
      
      res.json({ 
        success: true, 
        isLive: !!liveStream,
        data: liveStream 
      });
    } catch (error) {
      console.error('Erro ao verificar transmissão ao vivo:', error);
      res.status(500).json({ 
        success: false, 
        message: 'Erro ao verificar transmissão ao vivo' 
      });
    }
  }

  // Obter os últimos vídeos de um canal
  public static async getChannelVideos(req: Request, res: Response): Promise<void> {
    try {
      const { channelId } = req.params;
      const maxResults = req.query.maxResults ? parseInt(req.query.maxResults as string) : 10;
      
      if (!channelId) {
        res.status(400).json({ 
          success: false, 
          message: 'ID do canal é obrigatório' 
        });
        return;
      }
      
      const videos = await YouTubeController.youtubeService.getChannelVideos(channelId, maxResults);
      
      res.json({ 
        success: true, 
        data: videos 
      });
    } catch (error) {
      console.error('Erro ao buscar vídeos do canal:', error);
      res.status(500).json({ 
        success: false, 
        message: 'Erro ao buscar vídeos do canal' 
      });
    }
  }
}
