import unittest

from aria_router.core import Backend
from aria_router.config import (
    validate_config, ConfigurationError
)


def make_backend(name="codex", score=80):
    return Backend(
        name,
        frozenset({"text"}),
        frozenset({"analysis"}),
        quality_score=score
    )


class ConfigTests(unittest.TestCase):

    def test_valid_config(self):
        config = validate_config([
            make_backend("codex"),
            make_backend("claude")
        ])
        self.assertEqual(len(config.backends), 2)

    def test_unknown_backend(self):
        with self.assertRaises(ConfigurationError):
            validate_config([make_backend("unknown")])

    def test_duplicate_backend(self):
        with self.assertRaises(ConfigurationError):
            validate_config([
                make_backend("codex"),
                make_backend("codex")
            ])

    def test_invalid_quality(self):
        with self.assertRaises(ConfigurationError):
            validate_config([make_backend(score=150)])

    def test_boolean_quality(self):
        with self.assertRaises(ConfigurationError):
            validate_config([make_backend(score=True)])

    def test_unknown_capability(self):
        backend = Backend(
            "codex",
            frozenset({"unrestricted_access"}),
            frozenset({"analysis"})
        )
        with self.assertRaises(ConfigurationError):
            validate_config([backend])

    def test_invalid_version(self):
        with self.assertRaises(ConfigurationError):
            validate_config([make_backend()], version=2)


if __name__ == "__main__":
    unittest.main()
