#!/usr/bin/env bash
# query_mitm_flows — Consulta capturas .mitm con mitmdump: vuelca flujos a stdout
# o exporta a HAR. Acepta uno o varios archivos (también globs expandidos por el shell).

query_mitm_flows() {
    local -a files=()
    local filter=""
    local har_out=""
    local mitmdump_bin=""

    # ── Parseo de argumentos ────────────────────────────────────────────────────
    while [[ $# -gt 0 ]]; do
        case "$1" in
            --filter)
                [[ -z "${2:-}" ]] && { echo "ERROR: --filter requiere un valor" >&2; return 1; }
                filter="$2"; shift 2 ;;
            --har)
                [[ -z "${2:-}" ]] && { echo "ERROR: --har requiere una ruta de salida" >&2; return 1; }
                har_out="$2"; shift 2 ;;
            --mitmdump)
                [[ -z "${2:-}" ]] && { echo "ERROR: --mitmdump requiere la ruta al binario" >&2; return 1; }
                mitmdump_bin="$2"; shift 2 ;;
            --*)
                echo "ERROR: opcion desconocida: $1" >&2; return 1 ;;
            *)
                files+=("$1"); shift ;;
        esac
    done

    # ── Validar que se paso al menos un archivo ─────────────────────────────────
    if [[ ${#files[@]} -eq 0 ]]; then
        echo "ERROR: se requiere al menos un archivo .mitm como argumento" >&2
        echo "Uso: query_mitm_flows <file_or_glob> [--filter EXPR] [--har OUT] [--mitmdump BIN]" >&2
        return 1
    fi

    # ── Verificar que cada archivo existe ──────────────────────────────────────
    local -a valid_files=()
    for f in "${files[@]}"; do
        if [[ -f "$f" ]]; then
            valid_files+=("$f")
        else
            echo "ERROR: archivo no encontrado: $f" >&2
        fi
    done

    if [[ ${#valid_files[@]} -eq 0 ]]; then
        echo "ERROR: ningun archivo valido encontrado (el patron no matcheo nada)" >&2
        return 1
    fi

    # ── Autodetectar mitmdump ───────────────────────────────────────────────────
    if [[ -z "$mitmdump_bin" ]]; then
        if command -v mitmdump &>/dev/null; then
            mitmdump_bin="mitmdump"
        elif [[ -x "$HOME/.local/bin/mitmdump" ]]; then
            mitmdump_bin="$HOME/.local/bin/mitmdump"
        else
            echo "ERROR: mitmdump no encontrado. Instala mitmproxy:" >&2
            echo "  pip install mitmproxy   o   pip install --user mitmproxy" >&2
            return 1
        fi
    fi

    if [[ ! -x "$(command -v "$mitmdump_bin" 2>/dev/null || echo "$mitmdump_bin")" ]]; then
        echo "ERROR: binario mitmdump no ejecutable: $mitmdump_bin" >&2
        return 1
    fi

    # ── Construir y ejecutar el comando ────────────────────────────────────────
    local -a cmd=("$mitmdump_bin" -n)

    # Añadir todos los archivos de entrada con -r
    for f in "${valid_files[@]}"; do
        cmd+=(-r "$f")
    done

    # Modo HAR
    if [[ -n "$har_out" ]]; then
        cmd+=(--set "hardump=${har_out}")
    fi

    # Filtro de flujos (argumento posicional al final)
    if [[ -n "$filter" ]]; then
        cmd+=("$filter")
    fi

    "${cmd[@]}"
    local exit_code=$?

    if [[ -n "$har_out" && $exit_code -eq 0 ]]; then
        echo "HAR exportado a ${har_out}" >&2
    fi

    return $exit_code
}

# Ejecutar si se llama directamente
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
    query_mitm_flows "$@"
fi
