# ---------------------------------------------------------------
# Prontus CMS
# http://www.prontus.cl
# by Altavoz.net
#
# licensed under LGPL license.
# http://www.prontus.cl/license.html
# ---------------------------------------------------------------

# -------------------------------COMENTARIO GLOBAL---------------
# ---------------------------------------------------------------
# PROPOSITO.
# -----------
# Funciones para utilizar servicio snp de altavoz
# ---------------------------------------------------------------

# ---------------------------------------------------------------
# DECLARACIONES GLOBALES.
# ------------------------
use strict;
use utf8;

package lib_api_snp;

our $CLIENT;

# Inicializa el user-agent.
sub initUA {
    # Inicializa el UA.
    $CLIENT = LWP::UserAgent->new();
    $CLIENT->agent('Prontus CMS');
    my $conn_cache = LWP::ConnCache->new;
    $CLIENT->conn_cache($conn_cache);
}

sub valida_snp {
    if ($prontus_varglb::CONFIG{$prontus_varglb::PRONTUS_ID}{'SNP_APP'} eq 'NO') {
        return (0, 'Funcionalidad deshabilitada','La funcionalidad está deshabilitada.');
    }

    if ($prontus_varglb::CONFIG{$prontus_varglb::PRONTUS_ID}{'SNP_API_SERVER'} eq '' ||
        $prontus_varglb::CONFIG{$prontus_varglb::PRONTUS_ID}{'SNP_API_APP_ID'} eq '' ||
        $prontus_varglb::CONFIG{$prontus_varglb::PRONTUS_ID}{'SNP_API_KEY'} eq '') {
        return (0, 'Configuración incompleta', 'La funcionalidad requerida no está disponible ya que la configuración está incompleta.');
    }
    return (1, '', '');
}

sub api_post {
    my ($url, $headers_ref, $body) = @_;
    my $response = $CLIENT->post($url, %$headers_ref, Content => $body );

    if ($response->is_success) {
        return ($response->content, '');
    } else {
        return ($response->content, $response->status_line);
    }
}

sub api_get {
    my ($url, $headers_ref, $body) = @_;
    my $response = $CLIENT->get($url, %$headers_ref, Content => $body );

    if ($response->is_success) {
        return ($response->content, '');
    } else {
        return ($response->content, $response->status_line);
    }
}

sub api_delete {
    my ($url, $headers_ref, $body) = @_;
    my $response = $CLIENT->delete($url, %$headers_ref);

    if ($response->is_success) {
        return ($response->content, '');
    } else {
        return ($response->content, $response->status_line);
    }
}
sub process_response {
    my ($resp, $err) = @_;
    my $api_data;
    my $msg = '';
    my $json_resp;
    if ($err eq '') {
        my $ref = eval { JSON::from_json($resp); };

        if ($@) {
            print STDERR "Error al decodificar JSON [$resp][$err]\n";
            $msg = 'Error al procesar respuesta';
        } elsif ($ref->{'code'} eq '200') {
            $json_resp->{'status'} = 1;
            if (defined($ref->{'data'})) {
                $api_data = $ref->{'data'};
            }
            $msg = $ref->{'message'};
        } else {
            $json_resp->{'status'} = 0;
            $msg = $ref->{'message'};
        }
    } elsif ($resp ne '') {
        my $ref = eval { JSON::from_json($resp); };

        if ($@) {
            print STDERR "Error al decodificar JSON [$resp][$err]\n";
            $msg = 'Error al procesar respuesta';
        } else {
            $msg = $ref->{'message'};
        }
    } else {
        $json_resp->{'status'} = 0;
        $msg = "Error en API [$err]";
    }

    $json_resp->{'msg'} = $msg;
    $json_resp->{'api_data'} = $api_data if ($api_data);
    return $json_resp;
}

1;
