import os
import pytest
from ja4_common.settings import ClickHouseSettings


def test_default_settings():
    s = ClickHouseSettings()
    assert s.CLICKHOUSE_HOST == "clickhouse"
    assert s.CLICKHOUSE_PORT == 8123
    assert s.CLICKHOUSE_DB == "ja4_processing"
    assert s.CLICKHOUSE_DB_LOGS == "ja4_logs"
    assert s.CLICKHOUSE_DB_PROCESSING == "ja4_processing"
    assert s.CLICKHOUSE_USER == "admin"
    assert s.CLICKHOUSE_PASSWORD == ""


def test_settings_from_env(monkeypatch):
    monkeypatch.setenv("CLICKHOUSE_HOST", "myhost")
    monkeypatch.setenv("CLICKHOUSE_PORT", "9000")
    monkeypatch.setenv("CLICKHOUSE_DB", "testdb")
    s = ClickHouseSettings()
    assert s.CLICKHOUSE_HOST == "myhost"
    assert s.CLICKHOUSE_PORT == 9000
    assert s.CLICKHOUSE_DB == "testdb"


def test_settings_password_default_empty():
    s = ClickHouseSettings()
    assert s.CLICKHOUSE_PASSWORD == ""


def test_settings_user_default():
    s = ClickHouseSettings()
    assert s.CLICKHOUSE_USER == "admin"


def test_settings_password_from_env(monkeypatch):
    monkeypatch.setenv("CLICKHOUSE_PASSWORD", "secret")
    s = ClickHouseSettings()
    assert s.CLICKHOUSE_PASSWORD == "secret"


def test_settings_port_is_int():
    s = ClickHouseSettings()
    assert isinstance(s.CLICKHOUSE_PORT, int)


def test_settings_port_from_env_string(monkeypatch):
    """Port provided as string env var is coerced to int."""
    monkeypatch.setenv("CLICKHOUSE_PORT", "9100")
    s = ClickHouseSettings()
    assert s.CLICKHOUSE_PORT == 9100


def test_settings_all_fields_overridable(monkeypatch):
    monkeypatch.setenv("CLICKHOUSE_HOST", "h1")
    monkeypatch.setenv("CLICKHOUSE_PORT", "1234")
    monkeypatch.setenv("CLICKHOUSE_DB", "mydb")
    monkeypatch.setenv("CLICKHOUSE_USER", "myuser")
    monkeypatch.setenv("CLICKHOUSE_PASSWORD", "mypass")
    s = ClickHouseSettings()
    assert s.CLICKHOUSE_HOST == "h1"
    assert s.CLICKHOUSE_PORT == 1234
    assert s.CLICKHOUSE_DB == "mydb"
    assert s.CLICKHOUSE_USER == "myuser"
    assert s.CLICKHOUSE_PASSWORD == "mypass"
