import psycopg2
from psycopg2 import sql
from psycopg2.extras import execute_values

class DBContact:
    def __init__(self, db_obj: dict):
        """
        Inicializa la conexión a la base de datos.

        :param db_obj: Diccionario con las credenciales de la base de datos.
        """
        self.db_obj = db_obj

    def _get_connection(self):
        """
        Crea y retorna una nueva conexión a la base de datos.
        """
        return psycopg2.connect(
            host=self.db_obj['host'],
            port=self.db_obj['port'],
            database=self.db_obj['database'],
            user=self.db_obj['user'],
            password=self.db_obj['password']
        )

    def carga_contact(self, data_tuple: tuple):
        """
        Inserta un nuevo contacto en la base de datos.

        :param data_tuple: Tupla con los valores (nombre, apellido, email, num_tel, size_co, rol_contacto, industry_type, tipo_req).
        :raises Exception: Si ocurre un error durante la ejecución de la consulta.
        """
        query = sql.SQL("""
            INSERT INTO contact (full_date_time, nombre, apellido, email, estado, num_tel, size_co, rol_contacto, industry_type, tipo_req)
            VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
        """)

        try:
            with self._get_connection() as conn:
                with conn.cursor() as cursor:
                    cursor.execute(query, data_tuple)
                    conn.commit()
        except Exception as e:
            raise RuntimeError(f"Error al insertar contacto: {e}")
