import 'dart:convert';

import 'package:http/http.dart' as http;

import '../../funcoes_gerais.dart';
import 'youtube_classes.dart';

class YouTubeApi{

  Future<YouTubeSearchResponse> getChannelVideos({String? nextPageToken = ''}) async {
    var retorno = new YouTubeSearchResponse(
      errorCode: 0,
      errorMessage: '',
      etag: '',
      items: [],
      kind: '',
      nextPageToken: '',
    );

    if (await FuncoesGerais.checkInternetConnection() == false) {
      retorno.errorCode = 1;
      retorno.errorMessage = "Sem conexão com a internet";
      return retorno;
    }

    String url = "https://www.googleapis.com/youtube/v3/search?key=${FuncoesGerais.youtubeApiKey}&channelId=${FuncoesGerais.channelId}&part=snippet,id&order=date&maxResults=10";
    
    if(nextPageToken!.isNotEmpty) url += "&pageToken=$nextPageToken";

    try{
      var response = await http.get(Uri.parse(url));

      //if (response != null) {
      if (response.body.isNotEmpty) {
        if (response.statusCode == 200) {
          var data = jsonDecode(response.body);
          retorno = YouTubeSearchResponse.fromJson(data);
        } else {
          var data = jsonDecode(response.body);
          retorno.errorCode = -5;
          retorno.errorMessage = "Erro inesperado, tente novamente mais tarde. #${response.statusCode}";
          if(data != null && data['error'] != null){
            if(data['error']['message'] != null && data['error']['message'].toString().isNotEmpty){
              retorno.errorMessage = data['error']['message'].toString();
            }
          }
          
          return retorno;
        }
      } else {
        retorno.errorCode = 2;
        retorno.errorMessage = "Erro inesperado, tente novamente mais tarde";
        return retorno;
      }
    } catch (e) {
      retorno.errorCode = 2;
      retorno.errorMessage = "Falha interna no App, tente novamenre mais tarde.";
      return retorno;              
    }  

    return retorno;
  }

}