import pytest
from unittest.mock import MagicMock


from unittest.mock import MagicMock
import pytest
from vlcishared.csv.generador_csv import GeneradorCSV

@pytest.fixture
def mock_generador_csv_patch(monkeypatch):
    """
    Fixture reutilizable que mockea la clase GeneradorCSV para evitar escribir archivos reales.

    - Mockea el método `exportar`.
    - Permite inspeccionar llamadas y rutas generadas.
    - Permite inyectar side_effect para simular excepciones.

    Uso:
        def test_xxx(mock_generador_csv_patch):
            mock_csv = mock_generador_csv_patch("gestion_csv.gestor_csv.GeneradorCSV")
            ruta = mock_csv.exportar("archivo.csv", [["dato1"]], ["col1"])
            assert mock_csv.exportar.call_count == 1
    """

    def _patch(ruta_importacion: str, carpeta_exportacion: str, exportar_side_effect=None):
        instancia_real = GeneradorCSV(carpeta_exportacion) 
        generador_mock = MagicMock(spec=GeneradorCSV)
        rutas_csv = []

        def side_effect_exportar(nombre_fichero, filas, cabecera=None):
            ruta = instancia_real.exportar(nombre_fichero, filas, cabecera)
            rutas_csv.append(ruta)

            if exportar_side_effect:
                return exportar_side_effect(nombre_fichero, filas, cabecera)
            return ruta

        generador_mock.exportar.side_effect = side_effect_exportar
        generador_mock.exportar.rutas_csv = rutas_csv

        monkeypatch.setattr(ruta_importacion, lambda *args, **kwargs: generador_mock)

        return generador_mock

    return _patch
