import requests
import base64

# 1. Configuración de credenciales e ID
# Se asume que el archivo 'solicitud_id.txt' contiene solo el número (ej: 12345)
with open("solicitud_id.txt", "r") as f:
    ID_SOLICITUD = int(f.read().strip())

URL_BASE = "https://wsomnimsgrest.recargasypagos.com/api/v1"
PAYLOAD_BASE = {
    "UserName": "1709922841",
    "Password": "designerAV2033$$!",
    "IDSolicitud": ID_SOLICITUD
}

def recuperar_documento_firmado():
    print(f"--- Iniciando recuperación para Solicitud: {ID_SOLICITUD} ---")

    # PASO 1: Consultar estado y obtener el nombre del documento
    # Este método devuelve el listado de documentos asociados a la solicitud.
    res_info = requests.post(f"{URL_BASE}/GetSolicitudByID", json=PAYLOAD_BASE)
    info_data = res_info.json()

    if not info_data or "Solicitudes_Documentos" not in str(info_data):
        print("No se encontró información de la solicitud.")
        return

    # Extraemos el nombre del documento (usualmente el campo DocAFirmar) 
    # El manual indica que devuelve un array de documentos.
    # Intentamos obtener el nombre del primer documento disponible.
    try:
        # Nota: La estructura exacta del array depende de la versión del WS
        documentos = info_data[0] if isinstance(info_data, list) else info_data.get("Solicitudes_Documentos", [{}])[0]
        nombre_archivo = documentos.get("DocAFirmar")
        estado_firmado = documentos.get("DocFirmado") # 1 = Firmado, 0 = Sin firmar
        
        if estado_firmado == "1" or estado_firmado == 1:
            print(f"Confirmado: El documento '{nombre_archivo}' ya está firmado.")
        else:
            print(f"Aviso: El documento '{nombre_archivo}' aparece como NO FIRMADO aún.")
    except Exception as e:
        print("Error al parsear la lista de documentos. Asegúrate de que el ID sea correcto.")
        return

    # PASO 2: Descargar el documento en Base64
    payload_get_doc = {
        **PAYLOAD_BASE,
        "NombreDocumento": nombre_archivo
    }
    
    print(f"Descargando contenido de: {nombre_archivo}...")
    res_doc = requests.post(f"{URL_BASE}/SolicitudeGetDocument", json=payload_get_doc)
    doc_data = res_doc.json()

    # PASO 3: Validar resultado y guardar archivo
    if doc_data.get("resultCode") == 0:
        # El campo DocumentoBase64 contiene el PDF final (firmado si el proceso terminó)
        pdf_b64 = doc_data.get("DocumentoBase64")
        
        nombre_salida = f"FIRMADO_{nombre_archivo}"
        with open(nombre_salida, "wb") as f_pdf:
            f_pdf.write(base64.b64decode(pdf_b64))
        
        print(f"¡ÉXITO! Archivo guardado como: {nombre_salida}")
    else:
        print(f"ERROR de la API: {doc_data.get('resultText')}")

if __name__ == "__main__":
    recuperar_documento_firmado()