from pypos.core.base_controller import BaseController
from pypos.modules.sinkronisasi.controllers.sync_flow_controller import SyncFlowController


class SinkronDataController(BaseController):
    def __init__(self, view):
        super().__init__()
        self.view = view
        self.view.sinkronkan_ditekan.connect(self.mulai_sinkronisasi)

        self.sync_flow = SyncFlowController(mode="manual", view=self.view, user_info=None, app_controller=None)
        self.sync_flow.sync_finished.connect(self._on_finished)

    def mulai_sinkronisasi(self):
        if self.sync_flow.is_running():
            self.view.tampilkan_info(False, "Sinkronisasi sedang berjalan, mohon tunggu...")
            return

        self.view.mulai_progress()
        self._set_controls_enabled(False)
        self.sync_flow.start()

    def _on_finished(self, success):
        if not self.view:
            return
        self.view.selesai_progress()
        self._set_controls_enabled(True)

    def _set_controls_enabled(self, enabled: bool):
        if not self.view:
            return
        if hasattr(self.view, "btn_sinkron") and self.view.btn_sinkron:
            try:
                self.view.btn_sinkron.setEnabled(bool(enabled))
            except Exception as exc:
                self.log_warning(f"Gagal set state tombol sinkron: {exc}")

    def stop(self, force=False, wait_timeout_ms=None):
        self.sync_flow.stop(force=force, wait_timeout_ms=wait_timeout_ms)
