#!/usr/bin/env sh
set -eu

usage() {
  cat <<USAGE
Uso:
  PFX_PASSWORD='senha' $0 /caminho/certificado.pfx [url]

Variaveis:
  PFX_PASSWORD    Senha do certificado A1 .pfx

URL padrao:
  https://adn.producaorestrita.nfse.gov.br/municipios/docs/index.html

Exemplo:
  PFX_PASSWORD='senha' $0 certificados/municipios/3550308/certificado.pfx
USAGE
}

if [ "${1:-}" = "-h" ] || [ "${1:-}" = "--help" ]; then
  usage
  exit 0
fi

PFX_PATH="${1:-}"
TARGET_URL="${2:-https://adn.producaorestrita.nfse.gov.br/municipios/docs/index.html}"

if [ -z "$PFX_PATH" ]; then
  usage
  exit 2
fi

if [ ! -f "$PFX_PATH" ]; then
  echo "Erro: certificado nao encontrado: $PFX_PATH" >&2
  exit 2
fi

if [ -z "${PFX_PASSWORD:-}" ]; then
  echo "Erro: informe a senha em PFX_PASSWORD." >&2
  exit 2
fi

TMP_DIR=$(mktemp -d)
cleanup() {
  rm -rf "$TMP_DIR"
}
trap cleanup EXIT INT TERM

CERT_PEM="$TMP_DIR/cert.pem"
KEY_PEM="$TMP_DIR/key.pem"

echo "Validando PFX..."
openssl pkcs12 \
  -in "$PFX_PATH" \
  -passin "pass:$PFX_PASSWORD" \
  -nokeys \
  -clcerts \
  -out "$CERT_PEM" >/dev/null

openssl pkcs12 \
  -in "$PFX_PATH" \
  -passin "pass:$PFX_PASSWORD" \
  -nocerts \
  -nodes \
  -out "$KEY_PEM" >/dev/null

echo "Dados do certificado:"
openssl x509 -in "$CERT_PEM" -noout -subject -issuer -dates

echo
echo "Chamando ambiente de producao restrita:"
echo "  $TARGET_URL"

HTTP_CODE=$(curl \
  --silent \
  --show-error \
  --output "$TMP_DIR/response.body" \
  --write-out "%{http_code}" \
  --cert "$CERT_PEM" \
  --key "$KEY_PEM" \
  "$TARGET_URL")

echo "HTTP status: $HTTP_CODE"

if [ "$HTTP_CODE" -ge 200 ] && [ "$HTTP_CODE" -lt 400 ]; then
  echo "Resultado: conexao HTTPS com certificado executada com sucesso."
  exit 0
fi

echo "Resultado: servidor respondeu erro. Primeiras linhas da resposta:"
sed -n '1,40p' "$TMP_DIR/response.body"
exit 1
