import configparser
import time
import requests
import pyodbc # Reemplaza con la librería de tu base de datos (por ejemplo, 'psycopg2' para PostgreSQL)
import random

def clean_string(s):
    """Limpia un string de caracteres especiales."""
    # En Python, el método .replace() puede encadenarse para mayor eficiencia
    return s.replace("'", " ").replace(",", " ").replace(";", " ").replace("/", "-").replace('"', '').replace("\\", "").replace("?", "")

def main():
    """Función principal que ejecuta la lógica del programa."""
    config = configparser.ConfigParser()
    
    try:
        # Lee el archivo de configuración app.ini
        config.read('app.ini')
        
        # Lee los valores de configuración
        # Se asume una sección [Settings] en el archivo app.ini
        log_file_path = config['Settings']['LogFilePath']
        vdo3_dsn = config['Settings']['VDO3_DSN']
        
    except (configparser.Error, KeyError) as e:
        print(f"ERROR: No se pudo leer el archivo de configuración o falta una clave: {e}")
        time.sleep(5)
        return
    # Bucle infinito
    while True:
        print("INICIO")
        try:
            # Establece la conexión a la base de datos
            # El uso de 'with' asegura que la conexión se cierre automáticamente
            with pyodbc.connect(vdo3_dsn) as sql_conn:
                cursor = sql_conn.cursor()
                
                # Prepara y ejecuta el stored procedure para listar los CUITs
                # El uso de parámetros parametrizados es una buena práctica de seguridad
                cursor.execute("{CALL API_TELEFONOS_MASIVO_ (?)}", 'LISTAR')
                
                records = cursor.fetchall()
                count2 = 0

                for row in records:
                    count2 += 1
                    try:
                        str_phone = str(row.phone_number).strip()
                        id_reg = int(row.idreg)

                        # URL de la solicitud HTTP
#                        url = f"https://produccion.fidelitas.com.ar/blue/servicios-contratados-contrapartes/fidecheck/automatico?cliente=323510573&contraparte={str_contraparte}"
                        # Deshabilita la verificación del certificado SSL
#                        response = requests.get(url, verify=False, timeout=14400)
                        url = f"https://api.fidelitas.com.ar/v3/telephone"
#                        payload = "apikey=WF6ABLD8J93EURIOPZK7&phone={str_phone}"
#                        headers = {
#                        'Content-Type': 'application/x-www-form-urlencoded'
#                        }
#                        response = requests.request("POST", url, headers=headers, data=payload)
                        payload = {
                            'apikey': 'WF6ABLD8J93EURIOPZK7',
                            'phone': str_phone
                        }

                        response = requests.post(url, data=payload) 
                        print(response.text)
                      
                        # Verifica el estado de la respuesta
                        #response.raise_for_status()
                        
                        response_from_server = response.text
                        #print(f"Registro: {count2} -- {response_from_server}")
                        print(f"Registro: {count2} ")

                        # Actualiza el registro si la respuesta es exitosa
                        if response_from_server and "FAILURE" not in response_from_server.upper():
                            with pyodbc.connect(vdo3_dsn) as sql_upd_conn:
                                upd_cursor = sql_upd_conn.cursor()
                                upd_cursor.execute("{CALL API_TELEFONOS_MASIVO_ (?, ?, ?)}", 'UPDATELOTE', id_reg,response_from_server)
                                upd_cursor.commit()
                        else:
                            # Se ejecuta la misma lógica que el bloque 'if' original
                            with pyodbc.connect(vdo3_dsn) as sql_upd_conn:
                                upd_cursor = sql_upd_conn.cursor()
                                upd_cursor.execute("{CALL FIDECHECK_MASIVO_ (?, ?, ?)}", 'UPDATELOTE', id_reg,response_from_server)
                                upd_cursor.commit()

                    except requests.exceptions.RequestException as e:
                        print(f"ERROR en la solicitud HTTP: {e}")
                    except Exception as e:
                        print(f"ERROR en el procesamiento del registro: {e}")
                    
                    time.sleep(1) # Espera 2 segundos entre registros

        except Exception as e:
            print(f"ERROR general en el bucle principal: {e}")

        print(f"FIN {random.random()}")
        time.sleep(1) # Espera 1 segundo antes de reiniciar el bucle

if __name__ == "__main__":
    main()