#!/usr/bin/perl

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

# -------------------------------COMENTARIO GLOBAL---------------
# ---------------------------------------------------------------
# SCRIPT.
# -----------
# prontus_videos_metadata_upd.pl
# ---------------------------------------------------------------
# UBICACION.
# -----------
# ---------------------------------------------------------------
# PROPOSITO.
# -----------
# Actualiza el json de metadata asociado a los videos, sin transcodificar
# o ejecutar algun otro proceso
# ---------------------------------------------------------------
# LLAMADAS A SCRIPTS.
# ------------------------
# Usa las cgis de transcodificacion de prontus
# ---------------------------------------------------------------
# INVOCACIONES ACEPTADAS.
# ------------------------
# A traves de linea de comando, ej:
# Parametros:
# 1: nombre del prontus a procesar
# 2: identificador del fid a procesar
# 3: marca o marcas del video, si es mas de una se separan con coma,
#  ej: multimedia_video1,multimedia_video2
#
# Ejemplo de uso:
# perl prontus_video_metadata_upd.pl mi_prontus_id fid_noticia multimedia_video1,multimedia_video2
# ---------------------------------------------------------------
# ARCHIVOS DE ENTRADA.
# ------------------------
# ---------------------------------------------------------------
# ARCHIVOS DE SALIDA.
# ------------------------
# ---------------------------------------------------------------
# Tablas.
# ------------------------
# No utiliza.
# ---------------------------------------------------------------

# -------------------------------BEGIN SCRIPT--------------------
# ---------------------------------------------------------------
# DIRECTIVAS DE COMPILACION.
# ---------------------------
use strict;
use utf8;

BEGIN {
    use FindBin qw($Bin);
    unshift(@INC,$Bin); # Para dejar disponibles las librerias
    my $pathLibsProntus = $Bin;
    $pathLibsProntus =~ s/\/[^\/]+\/?$//;
    unshift(@INC,$pathLibsProntus); # Para dejar disponibles las librerias de prontus
}

use lib_stdlog;
&lib_stdlog::set_stdlog($0, 51200);
use prontus_varglb; &prontus_varglb::init();
use lib_prontus;
use lib_xcoding;
use glib_hrfec_03;
use glib_fildir_03;

# ---------------------------------------------------------------
# MAIN.
# ---------------------------------------------------------------
my $separator_orig = '   ';
my $separator = '';
my $COUNTER = 0;

my @BUSCAR;
my @CAMPOS;
my $BUSCAR_CAMPOS = 0;
my $FID = '';
my $PRONTUS_ID = '';
my $TS = '';
my $input;

main:{
    &lib_prontus::setUtf8();
    if (scalar @ARGV < 1) {
        print "Parámetros insuficientes. Modo de uso:\n";
        print "perl prontus_video_metadata_upd.pl <prontus_id>\n";
        print "perl prontus_video_metadata_upd.pl <prontus_id> <fid_id o ts articulo>\n";
        print "perl prontus_video_metadata_upd.pl <prontus_id> <fid_id o ts articulo> <multimedia_video1,multimedia_video2,..,multimedia_videoN>\n";
        exit;
    }
    $PRONTUS_ID = $ARGV[0];

    if (! &lib_prontus::valida_prontus($PRONTUS_ID)) {
        print "El parámetro 'prontus_id' no es válido.\n";
        exit;
    }

    if ($ARGV[1] ne '' && $ARGV[1] !~ /^fid\_/ && $ARGV[1] !~ /^\d{14}$/) {
        print "El segundo parámetro no es válido.\nDebe ser el nombre de un fid o el ts de un artículo.\n";
    }

    # cargamos configuracion de prontus
    &lib_prontus::load_config_by_id($PRONTUS_ID);

    if ($ARGV[1] =~ /^\d{14}$/) {
        $TS = $ARGV[1];
    } elsif ($ARGV[1] =~ /^fid\_/) {
        $FID = $ARGV[1];
    }

    if ($ARGV[2] eq '') {
        $BUSCAR_CAMPOS = 1;
    } else {
        @BUSCAR = split(',', $ARGV[2]);
    }

    $input = $Bin;
    $input =~ s/\/[^\/]+\/?$//;
    $input =~ s/\/[^\/]+\/?$//;
    $input .= "/$PRONTUS_ID/site/artic/";

    print STDERR "[".&glib_hrfec_03::fecha_human()." ". &glib_hrfec_03::hora_human()."] Inicio Proceso [$PRONTUS_ID][$TS][$FID]\n";

    if ($TS ne '') {
        $input .= substr($TS, 0, 8). "/xml/";
        &procesa_file("$TS.xml", $input);
    } else {
        &procesa_dir($input);
    }
    print STDERR 'Se procesaron ' . $COUNTER .  " videos \n" if $COUNTER;
    print STDERR "[".&glib_hrfec_03::fecha_human()." ". &glib_hrfec_03::hora_human()."] Fin Proceso [$PRONTUS_ID][$TS][$FID]\n";
}

#-----------------------------------------------------------------------#
sub procesa_dir {
    my($input) = $_[0];

    unless(-d $input) {
        die "El directorio $input no existe.";
    }
    $input = $input . '/' unless ($input =~ /\/$/);

    my @entries = &glib_fildir_03::lee_dir($input);
    foreach my $k (@entries) {
        next if($k eq '.' || $k eq '..');
        if(-f $input . $k) {
            &procesa_file($k, $input);

        } elsif(-d $input . $k) {
            $separator = $separator . $separator_orig;
            &procesa_dir($input . $k);
        }
    }
    $separator =~ s/$separator_orig$//;
}

#-----------------------------------------------------------------------#
sub procesa_file {
    my($filename, $path) = ($_[0], $_[1]);
    my $filepath = $path . $filename;
    my $titular;
    my $ts;
    if ($filename !~ /^(\d{14})\.xml/i) {
        return;
    }
    $ts = $1;

    if (-f $filepath) {
        my $file = &glib_fildir_03::read_file($filepath);
        if ($FID ne ''  && $file !~ /$FID/is) {
            return;
        }
        if ($BUSCAR_CAMPOS) {
            my %hash_campos;
            while($file =~ /<(multimedia_\w+)>/ig) {
                $hash_campos{$1} = 1;
            }
            @BUSCAR = keys %hash_campos;
        }
        my %data;
        my $cmd = '';
        my $result = '';
        my $result2 = '';
        my $media = '';
        foreach my $campo (@BUSCAR) {
            my $found = '';
            if ($file =~ /<$campo>([^<>]+)<\/$campo>/is) {
                $found = $1;
            } elsif ($file =~ /<$campo>.*?<\!\[CDATA\[(.*?)\]\]>.*?<\/$campo>/is) {
                $found = $1;
            }
            $found =~ s/[\n\r]//g;

            if ($file =~ /<_txt_titular>.*?<!\[CDATA\[(.*?)\]\]>.*?<\/_txt_titular>/is) {
                $titular = $1;
            }
            if ($found =~ /video/) {
                print STDERR "[".&glib_hrfec_03::fecha_human()." ". &glib_hrfec_03::hora_human()."] Actualizando [$ts][$titular][$campo][$found]\n";
                $media =  "$prontus_varglb::DIR_SERVER/$PRONTUS_ID/site/mm/". substr($ts ,0, 8) ."/mmedia/$found";
                next if (!-f $media);

                &lib_xcoding::genera_info_media($media);
            } elsif ($found =~ /audio/) {
                print STDERR "[".&glib_hrfec_03::fecha_human()." ". &glib_hrfec_03::hora_human()."] Actualizando [$ts][$titular][$campo][$found]\n";
                $media =  "$prontus_varglb::DIR_SERVER/$PRONTUS_ID/site/mm/". substr($ts ,0, 8) ."/mmedia/$found";
                next if (!-f $media);

                &lib_xcoding::genera_info_media_audio($media);
            }
        }
    }
}
