# edited by glg
import pytest

from pypos.modules.settings.services.penjualan_settings_service import PenjualanSettingsService

pytestmark = [pytest.mark.unit]


class _PpnServerSettingsServiceStub:
    def __init__(self, ready=True, url="https://example.local/ppn", reason=""):
        self.ready = bool(ready)
        self.url = str(url)
        self.reason = str(reason)

    def get_endpoint_status(self):
        return {
            "ready": self.ready,
            "url": self.url,
            "reason": self.reason,
        }


def test_penjualan_settings_service_get_ppn_settings_endpoint_ready():
    svc = PenjualanSettingsService(
        ppn_server_settings_service=_PpnServerSettingsServiceStub(
            ready=True,
            url="https://api.local/ppn",
            reason="",
        )
    )
    out = svc.get_ppn_settings()
    assert out["mode"] == "include"
    assert out["endpoint_ready"] is True
    assert out["endpoint_url"] == "https://api.local/ppn"


def test_penjualan_settings_service_update_mode_selalu_terkunci():
    svc = PenjualanSettingsService(
        ppn_server_settings_service=_PpnServerSettingsServiceStub(
            ready=False,
            url="",
            reason="not_configured",
        )
    )
    ok, message, payload = svc.update_ppn_mode(
        new_mode="exclude",
        admin_username="admin",
        admin_password="secret",
    )
    assert ok is False
    assert "dikunci" in str(message).lower()
    assert payload.get("changed") is False
    assert payload.get("mode") == "include"
