# edited by glg
import pytest
from PySide6.QtGui import QGuiApplication
from PySide6.QtWidgets import QApplication, QPushButton

from pypos.modules.auth.views import config_dialog as config_dialog_module


pytestmark = [pytest.mark.unit]


class _ConfigDialogControllerStub:
    def __init__(self, _view):
        pass

    @staticmethod
    def load_form_data():
        return {
            "api_base_url": "https://example.local/api",
            "client_name": "POS TEST",
            "request_timeout": 3,
        }

    @staticmethod
    def save_form_data(api_base_url, client_name, request_timeout):
        _ = api_base_url
        _ = client_name
        _ = request_timeout
        return True, "ok", False


def _ensure_qapp():
    app = QApplication.instance()
    if app is None:
        app = QApplication([])
    return app


def _resolve_expected_minimum_width():
    min_width = 760
    screen = QGuiApplication.primaryScreen()
    if screen is not None:
        available = screen.availableGeometry()
        max_width = max(640, int(available.width() * 0.92))
        min_width = min(min_width, max_width)
    return int(min_width)


def test_config_dialog_memiliki_tampilan_awal_lebih_besar(monkeypatch):
    _ensure_qapp()
    monkeypatch.setattr(
        config_dialog_module,
        "ConfigDialogController",
        _ConfigDialogControllerStub,
    )

    dialog = config_dialog_module.ConfigDialog()
    dialog.show()
    QApplication.processEvents()

    expected_min_w = _resolve_expected_minimum_width()
    assert int(dialog.minimumWidth()) >= int(expected_min_w)
    assert int(dialog.width()) >= int(dialog.minimumWidth())

    button_texts = {
        str(btn.text() or "").strip()
        for btn in dialog.findChildren(QPushButton)
    }
    assert "Simpan" in button_texts
    assert "Batal" in button_texts
