
import 'dart:convert';

import 'package:get/get_utils/src/get_utils/get_utils.dart';
import 'package:http/http.dart' as http;

import '../../default_response_api.dart';
import '../../funcoes_gerais.dart';
import 'notificacoes_classes.dart';

class NotificacoesApi{

  Future<NotificacoesResponse> getNotificacoes(int pagina,{String lidas = 'T',String curtidas = 'T'}) async{
    var retorno = new NotificacoesResponse(
      errorCode: 0,
      errorMessage: "",
      loadMore: false,
      results: []
    );
    if(await FuncoesGerais.checkInternetConnection() == false){
      retorno.errorCode = 1;
      retorno.errorMessage = "Sem conexão com a Internet";
    }
    else{    
      var token = await FuncoesGerais.getUsuToken();
      String url = FuncoesGerais.urlBaseNewCore+'api/v1/user/notificacoes/$token/$pagina/10/$lidas/$curtidas';
      Map<String, String> heads = Map();
      heads["Content-type"] = "application/json; charset=utf-8";

      var response = await http.get(Uri.parse(url), headers: heads);
      
      //if (response != null) {
      if (!GetUtils.isNullOrBlank(response.body)!) {
        if (response.statusCode == 200) {
          var data = jsonDecode(response.body);
          retorno = NotificacoesResponse.fromJson(data);
        }
        else{
          retorno.errorCode = response.statusCode;
          retorno.errorMessage = "Falha: ${response.statusCode}";                      
        }
      }
      else{
        retorno.errorCode = 2;
        retorno.errorMessage = "Falha na comunicação com o server. Tente novamente";          
      }  
    }   

    return retorno;   
  } 

  Future<NotificacaoResponse> getNotificacao(int? id) async{
    var retorno = new NotificacaoResponse(
      errorCode: 0,
      errorMessage: ""
    );

    if(await FuncoesGerais.checkInternetConnection() == false){
      retorno.errorCode = 1;
      retorno.errorMessage = "Sem conexão com a Internet";
    }
    else{    
      var token = await FuncoesGerais.getUsuToken();
      String url = FuncoesGerais.urlBaseNewCore+'api/v1/user/notificacao/$token/$id';
      Map<String, String> heads = Map();
      heads["Content-type"] = "application/json; charset=utf-8";

      var response = await http.get(Uri.parse(url), headers: heads);
      
      if (!GetUtils.isNullOrBlank(response.body)!) {
        if (response.statusCode == 200) {
          var data = jsonDecode(response.body);
          retorno = NotificacaoResponse.fromJson(data);
        }
        else{
          retorno.errorCode = response.statusCode;
          retorno.errorMessage = "Falha: ${response.statusCode}";                      
        }
      }
      else{
        retorno.errorCode = 2;
        retorno.errorMessage = "Falha na comunicação com o server. Tente novamente";          
      }
    }

    return retorno;  
  }

  Future<DefaultResponseApi> notificacaoLike(NotificacaoLikeRequest post) async{
    DefaultResponseApi objRetorno = new DefaultResponseApi();

    if(await FuncoesGerais.checkInternetConnection() == false){
      objRetorno.errorCode = 1;
      objRetorno.errorMessage = "Sem Conexão com a Internet.";
      return objRetorno;
    }

      var token = await FuncoesGerais.getUsuToken();
      String url = FuncoesGerais.urlBaseNewCore+'api/v1/user/notificacaolike/$token';
      Map<String, String> heads = Map();
      heads["Content-type"] = "application/json; charset=utf-8";

    var body = json.encode(post);
    
    var response = await http.post(Uri.parse(url), headers: heads, body: body);    

    if (!GetUtils.isNullOrBlank(response.body)!) {
      if (response.statusCode == 200) {
        var data = jsonDecode(response.body);
        objRetorno = DefaultResponseApi.fromJson(data);
      }
      else{
        objRetorno.errorCode = response.statusCode;
        objRetorno.errorMessage = "Falha: ${response.statusCode}";                      
      }
    }
    else{
      objRetorno.errorCode = 2;
      objRetorno.errorMessage = "Falha na comunicação com o server. Tente novamente";          
    }

    return objRetorno;
  }

  Future<DefaultResponseApi> notificacaoLida(NotificacaoLidaRequest post, int notificacaoId) async{
    DefaultResponseApi objRetorno = new DefaultResponseApi();
    if(await FuncoesGerais.checkInternetConnection() == false){
      objRetorno.errorCode = 1;
      objRetorno.errorMessage = "Sem Conexão com a Internet.";
      return objRetorno;
    }
    
    var token = await FuncoesGerais.getUsuToken();
    String url = FuncoesGerais.urlBaseNewCore+'api/v1/user/notificacaolida/$token/$notificacaoId';
    Map<String, String> heads = Map();
    heads["Content-type"] = "application/json; charset=utf-8";

    var body = json.encode(post);

    var response = await http.post(Uri.parse(url), headers: heads, body: body);    


    if (!GetUtils.isNullOrBlank(response.body)!) {
      if (response.statusCode == 200) {
        var data = jsonDecode(response.body);
        objRetorno = DefaultResponseApi.fromJson(data);
      }
      else{
        objRetorno.errorCode = response.statusCode;
        objRetorno.errorMessage = "Falha: ${response.statusCode}";                      
      }
    }
    else{
      objRetorno.errorCode = 2;
      objRetorno.errorMessage = "Falha na comunicação com o server. Tente novamente";          
    }

    return objRetorno;
  }       

}