#!/bin/bash

# ======================================================================
# Archivo:       creardeb
# Ruta:          /usr/local/bin/
# Autor:         Charlie Martínez® <cmartinez@quirinux.org>
# Licencia:      https://www.gnu.org/licenses/gpl-2.0.txt
# Propósito:     Generador de paquete .deb conforme a Debian Policy
# Distribución:  Quirinux 2.x
# ======================================================================

#
# Copyright (c) 2019-2025 Charlie Martínez, derechos reservados.
# Licencia: https://www.gnu.org/licenses/gpl-2.0.txt
# Usos autorizados y no autorizados de la marca Quirinux:
# Ver https://www.quirinux.org/aviso-legal
#

set -euo pipefail

# ----------------------------------------------------------------------
# Comprobación de argumentos
# ----------------------------------------------------------------------
if [ "$#" -ne 1 ]; then
    echo "Uso: creardeb <directorio_paquete>" >&2
    exit 1
fi

# ----------------------------------------------------------------------
# Rutas
# ----------------------------------------------------------------------

PKG_DIR="$(realpath "$1")"
DEBIAN_DIR="$PKG_DIR/DEBIAN"
CONTROL_FILE="$DEBIAN_DIR/control"
MD5_FILE="$DEBIAN_DIR/md5sums"

# ----------------------------------------------------------------------
# Validaciones básicas
# ----------------------------------------------------------------------

if [ ! -d "$PKG_DIR" ]; then
    echo "Error: '$PKG_DIR' no es un directorio válido" >&2
    exit 1
fi

if [ ! -d "$DEBIAN_DIR" ]; then
    echo "Error: falta el directorio DEBIAN/" >&2
    exit 1
fi

if [ ! -f "$CONTROL_FILE" ]; then
    echo "Error: falta el archivo DEBIAN/control" >&2
    exit 1
fi

# ----------------------------------------------------------------------
# Generar md5sums 
# ----------------------------------------------------------------------

echo "Generando md5sums"

(
    cd "$PKG_DIR"
    find . -type f \
        ! -path "./DEBIAN/*" \
        -print0 \
    | sort -z \
    | xargs -0 md5sum \
    | sed 's|^\./||' \
    > "$MD5_FILE"
)

chmod 644 "$MD5_FILE"

# ----------------------------------------------------------------------
# Calcular Installed-Size
# ----------------------------------------------------------------------

INSTALLED_SIZE="$(du -sk --exclude=DEBIAN "$PKG_DIR" | cut -f1)"
echo "Installed-Size calculado: $INSTALLED_SIZE KB"

# ----------------------------------------------------------------------
# Normalizar y corregir control
# ----------------------------------------------------------------------

# Asegurar newline final
sed -i -e '$a\' "$CONTROL_FILE"

# Eliminar cualquier Installed-Size previo
sed -i '/^Installed-Size:/d' "$CONTROL_FILE"

# Insertar Installed-Size ANTES del final del párrafo
awk -v size="$INSTALLED_SIZE" '
BEGIN { inserted=0 }
{
    if (!inserted && NF==0) {
        print "Installed-Size: " size
        inserted=1
    }
    print
}
END {
    if (!inserted) {
        print "Installed-Size: " size
    }
}
' "$CONTROL_FILE" > "$CONTROL_FILE.tmp"

mv "$CONTROL_FILE.tmp" "$CONTROL_FILE"

# Garantizar newline final obligatorio
sed -i -e '$a\' "$CONTROL_FILE"

chmod 644 "$CONTROL_FILE"

# ----------------------------------------------------------------------
# Construir paquete .deb
# ----------------------------------------------------------------------
echo "Construyendo paquete .deb"

dpkg-deb --build "$PKG_DIR"

echo "Paquete generado correctamente"
