import urllib.request
import urllib.parse
import urllib.error

URL = "https://prewww1.aeat.es/wlpl/TIKE-CONT/ws/SistemaFacturacion/VerifactuSOAP"

soap_request = """<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Header/>
  <soapenv:Body>
    <RegFactuSistemaFacturacion xmlns:sum="SuministroLR">
      <sum:Cabecera>
        <sum1:ObligadoEmision xmlns:sum1="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd">
          <sum1:NombreRazon>TEST EMPRESA SL</sum1:NombreRazon>
          <sum1:NIF>53950250R</sum1:NIF>
        </sum1:ObligadoEmision>
      </sum:Cabecera>
      <sum:RegistroFactura>
        <sum1:RegistroAlta xmlns:sum1="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroLR.xsd">
          <sum1:IDVersion>1.0</sum1:IDVersion>
          <sum1:IDFactura>
            <sum1:IDEmisorFactura>53950250R</sum1:IDEmisorFactura>
            <sum1:NumSerieFactura>FV2026/TEST001</sum1:NumSerieFactura>
            <sum1:FechaExpedicionFactura>17-04-2026</sum1:FechaExpedicionFactura>
          </sum1:IDFactura>
          <sum1:NombreRazonEmisor>TEST EMPRESA SL</sum1:NombreRazonEmisor>
          <sum1:TipoFactura>F1</sum1:TipoFactura>
          <sum1:DescripcionOperacion>Factura de prueba test</sum1:DescripcionOperacion>
          <sum1:Desglose>
            <sum1:DetalleDesglose>
              <sum1:ClaveRegimen>01</sum1:ClaveRegimen>
              <sum1:CalificacionOperacion>S1</sum1:CalificacionOperacion>
              <sum1:TipoImpositivo>01</sum1:TipoImpositivo>
              <sum1:BaseImponibleOimporteNoSujeto>100.00</sum1:BaseImponibleOimporteNoSujeto>
              <sum1:CuotaRepercutida>21.00</sum1:CuotaRepercutida>
            </sum1:DetalleDesglose>
          </sum1:Desglose>
          <sum1:CuotaTotal>21.00</sum1:CuotaTotal>
          <sum1:ImporteTotal>121.00</sum1:ImporteTotal>
          <sum1:Encadenamiento>
            <sum1:PrimerRegistro>S</sum1:PrimerRegistro>
          </sum1:Encadenamiento>
          <sum1:SistemaInformatico>
            <sum1:NombreRazon>TEST API</sum1:NombreRazon>
            <sum1:NIF>53950250R</sum1:NIF>
            <sum1:NombreSistemaInformatico>TEST-API</sum1:NombreSistemaInformatico>
            <sum1:IdSistemaInformatico>1</sum1:IdSistemaInformatico>
            <sum1:Version>1.0</sum1:Version>
            <sum1:NumeroInstalacion>1</sum1:NumeroInstalacion>
            <sum1:TipoUsoPosibleSoloVerifactu>S</sum1:TipoUsoPosibleSoloVerifactu>
          </sum1:SistemaInformatico>
          <sum1:FechaHoraHusoGenRegistro>17-04-2026T12:00:00</sum1:FechaHoraHusoGenRegistro>
          <sum1:TipoHuella>SHA-256</sum1:TipoHuella>
          <sum1:Huella>0A1B2C3D4E5F6</sum1:Huella>
        </sum1:RegistroAlta>
      </sum:RegistroFactura>
    </RegFactuSistemaFacturacion>
  </soapenv:Body>
</soapenv:Envelope>"""

ctx = urllib.request.ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = urllib.request.ssl.CERT_NONE

headers = {
    "Content-Type": "text/xml; charset=utf-8",
    "SOAPAction": ""
}

print("Testing AEAT without certificate (just headers)...")

req = urllib.request.Request(URL, data=soap_request.encode('utf-8'), headers=headers)

try:
    opener = urllib.request.build_opener(urllib.request.HTTPSHandler(context=ctx))
    response = opener.open(req, timeout=30)
    print(f"Status: {response.status}")
    print(f"Response: {response.read().decode('utf-8')[:1500]}")
except urllib.error.HTTPError as e:
    print(f"HTTP Error: {e.code}")
    print(f"Body: {e.read().decode('utf-8')[:1500]}")
except Exception as e:
    print(f"Error: {type(e).__name__}: {e}")