# TODO BLQ-0 (bug_report_lib.sh) VARIABLES GLOBALES
BUGSQUAD_D=~/bugsquad_dir/
LAUNCHPAD_BUG_URL="https://launchpad.net/distros/ubuntu/+source/ubiquity/+bug/" # >bugnum
TMP_D=${BUGSQUAD_D}/tmp/
CWD=$TMP_D
bug_report_extract_crash_url () { 
    # Extrae la URL al crash_report(s) a partir del nĂºmero de bug.
    # Usage: -> bug_report_extract_crash_url "$BUGNUMBER"
    # Input args:
        local BUGNUMBER="$1" # numero de bug en Launchpad  
    # Output: Crash Report(s) URL(s)
    # Returns: 0 always
    # Global Vars: $LAUNCHPAD_BUG_URL >> url de los informes de error
        local LAUNCHPADBUGURL=$LAUNCHPAD_BUG_URL
        local CRASH_REPORT_URL # Output: URL1 URL2 URL3
    
    CRASH_REPORT_URL="$(wget -q -O - "$LAUNCHPAD_BUG_URL/$BUGNUMBER" | sed -n '/
/,/
/ {s@.*(http://librarian.launchpad.net/.[^" ]*crash)".*@1 @gp}')"
    echo $CRASH_REPORT_URL
    return 0;
}
bug_report_dwl_crash_file () { 
    # Baja el fichero "Crash Report" desde su URL.
    # Usage: -> bug_report_dwl_crash_file "$CRASH_URL" "$DEST"
    # Input args:
        local CRASH_URL="$1" # Crash report file, URL, or - (stdin)  
        local DEST="$2" # Destination (dir, filename, or - (stdout))
    # Output: None
    # Returns: 0 always
    
    # Distinguir entre nombre de fichero destino y directorio
    if [ -d "$DEST" ]; then
        cd "$DEST"; wget "$CRASH_URL"
    else
        # curl ?
        wget -O "$DEST" "$CRASH_URL"
    fi    
    return 0;
}
bug_report_dwl_short_crash_file () { 
    # Igual que bug_report_dwl_crash_file pero corta la descarga al llegar al
    # coredump.
    # Usage: -> bug_report_dwl_short_crash_file "$CRASH_URL" "$DEST"
    # Input args:
        local CRASH_URL="$1" # 
        local DEST="$2" #   
    # Output: None
    # Returns: 0 always
        local TMPFILE WGETPID
    TMPFILE=$(tempfile -p crashtmp)
    WGETPIDFILE=$(tempfile -s pid)
    # matamos a wget cuando empieze la descarga del coredump.
    while :; do grep -q "Uname:" $TMPFILE && kill $(cat $WGETPIDFILE) && exit; sleep 1; done &
    wget -O $TMPFILE $CRASH_URL & echo $! > $WGETPIDFILE
    wait
   # Salida a $DEST
    if [ "$DEST" == "-" ]; then
        sed -n '1,/^Uname:/ {p}' $TMPFILE 
    else
        sed -n '1,/^Uname:/ {p}' $TMPFILE > "$DEST" 
    fi
    # no es necesario 'ver man tmpfile', pero por si acaso:
    [ -f "$TMPFILE" ] && rm -f "$TMPFILE"
    [ -f "$WGETPIDFILE" ] && rm -f "$WGETPIDFILE"
    return 0;
}
bug_report_unpack () { 
    # Crea el directorio de destino y desempaqueta el fichero crash_file.
    # Realmente no hay que hacer nada, apport-unpack se encarga de crear el
    # directorio de destino. 
    # TODO: handle compressed files
    # Usage: -> bug_report_unpack "$CRASH_FILE" "$DEST_CRASH_REPORT_DIR"
    #        -> bug_report_unpack "-" "$DEST_CRASH_REPORT_DIR" # STDIN
    # Input args:
        local CRASH_FILE="$1" # Crash report file; "-" para stdin ;
        local DEST_CRASH_REPORT_DIR="$2" # Dest dir to unpack crash report file
    # Output: None
    # Returns: 0 always
    
    # wget -O - "${CRASH_URL[0]}" | apport-unpack - $CRASHDIR
    apport-unpack $CRASH_FILE $DEST_CRASH_REPORT_DIR
    return 0;
}
bug_report_summary () { 
    # Crea la cabecera del informe del error
    # Usage: -> bug_report_summary "$CRASH_REPORT_DIR"
    # Input args:
        local CRASH_REPORT_DIR="$1" # Full path to bug report directory  
    # Output: Bug Report Summary.
    # Returns: 0 always
    
    local PACKAGE PACKAGE_VER DISTRO_RELEASE SOURCE_PACKAGE
    PACKAGE="$(cat $CRASH_REPORT_DIR/Package)"
    eval $(awk '{print "PACKAGE="$1" PACKAGE_VER="$2}' $CRASH_REPORT_DIR/Package)
    DISTRO_RELEASE="$(cat $CRASH_REPORT_DIR/DistroRelease)"
    SOURCE_PACKAGE="$(cat $CRASH_REPORT_DIR/SourcePackage)"
    cat <<- EOF
	[Binary Package Hint: $PACKAGE]
	From the Attached Crash Report:
	Distro Release: $DISTRO_RELEASE
	Package (version): $PACKAGE ($PACKAGE_VER)
	Source Package: $SOURCE_PACKAGE
	Original Description:
	EOF
    return 0;
}