import logging
from PySide6.QtCore import QObject, Signal
from pypos.modules.sinkronisasi.services.sync_execution_service import SyncExecutionService

LOGGER = logging.getLogger(__name__)

class SinkronWorker(QObject):
    progress = Signal(int, str, str)
    selesai = Signal(int)
    gagal = Signal(str)

    def __init__(self, table_list, force_full_tables=None, full_refresh_tables=None):
        super().__init__()
        self.table_list = table_list
        self.force_full_tables = force_full_tables or []
        self.full_refresh_tables = full_refresh_tables or []
        self.execution_service = SyncExecutionService()

    def run(self):
        try:
            updated_total = self.execution_service.execute(
                table_list=self.table_list,
                force_full_tables=self.force_full_tables,
                full_refresh_tables=self.full_refresh_tables,
                progress_callback=self.progress.emit,
            )
            self.selesai.emit(updated_total)
        except Exception as e:
            LOGGER.exception("Sinkronisasi gagal: %s", str(e))
            self.gagal.emit(str(e))
