# edited by glg
import pytest

from pypos.modules.sinkronisasi.config import sync_config


pytestmark = [pytest.mark.unit]


def test_read_raw_app_settings_invalid_json_returns_empty(tmp_path, monkeypatch):
    bad_file = tmp_path / "app_settings.json"
    bad_file.write_text("{invalid-json", encoding="utf-8")
    monkeypatch.setattr(sync_config, "APP_SETTINGS_FILE", str(bad_file))
    assert sync_config._read_raw_app_settings() == {}


def test_numeric_parser_fallbacks_for_invalid_values(monkeypatch):
    cfg = {
        "request_timeout": "abc",
        "sync_cleanup_wait_timeout_ms": "oops",
        "sync_stop_wait_timeout_ms": {},
        "sync_page_size": "n/a",
        "settlement_direct_timeout_sec": "x",
        "export_upload_batch_limit": "y",
        "export_upload_retry_backoff_factor": "z",
    }
    monkeypatch.setattr(sync_config, "_read_sync_config", lambda: cfg)

    assert sync_config.get_sync_request_timeout() == 30
    assert sync_config.get_sync_cleanup_wait_timeout_ms() == 1000
    assert sync_config.get_sync_stop_wait_timeout_ms() == 2000
    assert sync_config.get_sync_page_size() == 500
    assert sync_config.get_settlement_direct_timeout_sec() == 8
    assert sync_config.get_export_upload_batch_limit() == 50
    assert sync_config.get_export_upload_retry_backoff_factor() == 2.0


def test_retryable_statuses_filter_invalid_and_duplicates(monkeypatch):
    cfg = {"http_retry_statuses": ["500", "abc", 500, 99, 600, 429]}
    monkeypatch.setattr(sync_config, "_read_sync_config", lambda: cfg)
    assert sync_config.get_sync_circuit_retryable_statuses() == [500, 429]


def test_export_file_retention_legacy_default_30_downgraded_to_7(monkeypatch):
    monkeypatch.setattr(sync_config, "_read_sync_config", lambda: {})
    monkeypatch.setattr(
        sync_config,
        "_read_raw_app_settings",
        lambda: {"export_upload_file_retention_days": 30},
    )
    assert sync_config.get_export_file_retention_days() == 7


def test_export_file_retention_invalid_value_falls_back_to_7(monkeypatch):
    monkeypatch.setattr(sync_config, "_read_sync_config", lambda: {})
    monkeypatch.setattr(
        sync_config,
        "_read_raw_app_settings",
        lambda: {"export_file_retention_days": "invalid"},
    )
    assert sync_config.get_export_file_retention_days() == 7


def test_export_upload_compile_check_enabled_with_endpoint_fallback(monkeypatch):
    cfg = {
        "export_upload_compile_check_enabled": "invalid",
        "ep_upload_compile_status": "/compile/status",
    }
    monkeypatch.setattr(sync_config, "_read_sync_config", lambda: cfg)
    assert sync_config.get_export_upload_compile_check_enabled() is True
