#!/bin/bash
#
# Comprueba si un dominio enmascarado esta correctamente configurado para el
# modulo Domain Tracking.
#
# Uso:
#   ./dt_check.sh DOMINIO TOKEN
#
# Ejemplo:
#   ./dt_check.sh stylesheet-href-style-css.online YskUT8QOsmK4C04lXKRYqu92lzP2NvodR6hvefTa
#
# Requiere: curl

set -u

DOMAIN="${1:-}"
TOKEN="${2:-}"

if [ -z "$DOMAIN" ] || [ -z "$TOKEN" ]; then
    echo "Uso: $0 DOMINIO TOKEN"
    exit 1
fi

ok=0
fail=0

line() { printf '%s\n' "----------------------------------------------------------------------"; }
pass() { printf '  [OK]    %s\n' "$1"; ok=$((ok+1)); }
bad()  { printf '  [FALLA] %s\n' "$1"; fail=$((fail+1)); }

line
echo "Comprobacion de dominio enmascarado"
echo "  dominio: $DOMAIN"
echo "  token:   $TOKEN"
line

# 1. DNS
ip=$(getent hosts "$DOMAIN" 2>/dev/null | awk '{print $1}' | head -1)
if [ -n "$ip" ]; then
    pass "DNS resuelve a $ip"
else
    bad "El dominio no resuelve. Revisa el registro A en tu proveedor de DNS."
    line
    exit 1
fi

# 2. Certificado TLS (el script generado usa https)
if curl -s -o /dev/null --max-time 15 "https://$DOMAIN/" 2>/dev/null; then
    pass "HTTPS responde con certificado valido"
else
    bad "HTTPS falla o el certificado no es valido para este dominio."
    echo "          El script se genera con https://, asi que el SSL es obligatorio."
fi

# 3. El loader debe devolver JavaScript
loader=$(curl -s -o /tmp/dt_loader.$$ -w "%{http_code}|%{content_type}" \
    --max-time 20 "https://$DOMAIN/dt/$TOKEN.js" 2>/dev/null)
code="${loader%%|*}"
ctype="${loader##*|}"

if [ "$code" = "200" ] && printf '%s' "$ctype" | grep -qi "javascript"; then
    pass "El loader responde 200 con content-type $ctype"

    if grep -q "$DOMAIN/dt/verify/$TOKEN" /tmp/dt_loader.$$; then
        pass "El JS apunta la verificacion a $DOMAIN (dominio real oculto)"
    else
        embedded=$(grep -o "https://[^']*/dt/verify/" /tmp/dt_loader.$$ | head -1)
        bad "El JS apunta a otro host: ${embedded:-desconocido}"
        echo "          El dominio real queda expuesto en el codigo del cliente."
    fi
else
    bad "El loader responde $code con content-type $ctype"
    echo "          Se esperaba 200 / application/javascript."
    echo "          Este dominio no esta sirviendo la aplicacion: el <script> del"
    echo "          cliente carga una pagina de error y no se ejecuta nada."
fi

# 4. Endpoint de verificacion con CORS
verify=$(curl -s -D /tmp/dt_hdr.$$ -o /tmp/dt_body.$$ -w "%{http_code}" --max-time 20 \
    -H "Origin: https://sitio-de-prueba.example" \
    "https://$DOMAIN/dt/verify/$TOKEN?domain=sitio-de-prueba.example" 2>/dev/null)

if [ "$verify" = "200" ] && grep -q '"allowed"' /tmp/dt_body.$$; then
    pass "El endpoint de verificacion responde JSON: $(head -c 120 /tmp/dt_body.$$)"
else
    bad "El endpoint de verificacion responde $verify"
fi

if grep -qi "access-control-allow-origin" /tmp/dt_hdr.$$; then
    pass "Cabecera CORS presente ($(grep -i 'access-control-allow-origin' /tmp/dt_hdr.$$ | tr -d '\r'))"
else
    bad "Falta la cabecera Access-Control-Allow-Origin"
    echo "          Anade 'dt/verify/*' a 'paths' en config/cors.php."
fi

rm -f /tmp/dt_loader.$$ /tmp/dt_hdr.$$ /tmp/dt_body.$$

line
echo "Resultado: $ok correctas, $fail con problemas"
if [ "$fail" -eq 0 ]; then
    echo "El dominio esta listo para usarse en Mi URL."
else
    echo "Corrige los puntos marcados antes de entregar el script a un cliente."
fi
line

[ "$fail" -eq 0 ] || exit 2
